/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.facebook.presto.hive.metastore; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMultimap; import org.apache.hadoop.hive.metastore.MetaStoreUtils; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.PrincipalPrivilegeSet; import org.apache.hadoop.hive.metastore.api.SerDeInfo; import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.testng.annotations.Test; import java.util.Properties; import static org.testng.Assert.assertEquals; public class TestMetastoreUtil { private static final StorageDescriptor TEST_STORAGE_DESCRIPTOR = new StorageDescriptor( ImmutableList.of( new FieldSchema("col1", "bigint", "comment1"), new FieldSchema("col2", "binary", null), new FieldSchema("col3", "string", null)), "hdfs://VOL1:9000/db_name/table_name", "com.facebook.hive.orc.OrcInputFormat", "com.facebook.hive.orc.OrcOutputFormat", false, 100, new SerDeInfo("table_name", "com.facebook.hive.orc.OrcSerde", ImmutableMap.of("sdk1", "sdv1", "sdk2", "sdv2")), ImmutableList.of("col2", "col3"), null, ImmutableMap.of()); private static final org.apache.hadoop.hive.metastore.api.Table TEST_TABLE = new org.apache.hadoop.hive.metastore.api.Table( "table_name", "db_name", "owner_name", 0, 0, 0, TEST_STORAGE_DESCRIPTOR, ImmutableList.of( new FieldSchema("pk1", "string", "comment pk1"), new FieldSchema("pk2", "string", null)), ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3"), "view original text", "view extended text", "MANAGED_TABLE"); static { TEST_TABLE.setPrivileges(new PrincipalPrivilegeSet(ImmutableMap.of(), ImmutableMap.of(), ImmutableMap.of())); } private static final org.apache.hadoop.hive.metastore.api.Partition TEST_PARTITION = new org.apache.hadoop.hive.metastore.api.Partition( ImmutableList.of("pk1v", "pk2v"), "db_name", "table_name", 0, 0, TEST_STORAGE_DESCRIPTOR, ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3")); private static final StorageDescriptor TEST_STORAGE_DESCRIPTOR_WITH_UNSUPPORTED_FIELDS = new StorageDescriptor( ImmutableList.of( new FieldSchema("col1", "bigint", "comment1"), new FieldSchema("col2", "binary", null), new FieldSchema("col3", "string", null)), "hdfs://VOL1:9000/db_name/table_name", "com.facebook.hive.orc.OrcInputFormat", "com.facebook.hive.orc.OrcOutputFormat", false, 100, new SerDeInfo("table_name", "com.facebook.hive.orc.OrcSerde", ImmutableMap.of("sdk1", "sdv1", "sdk2", "sdv2")), ImmutableList.of("col2", "col3"), ImmutableList.of(new Order("col2", 0), new Order("col3", 1)), ImmutableMap.of("sk1", "sv1")); private static final org.apache.hadoop.hive.metastore.api.Table TEST_TABLE_WITH_UNSUPPORTED_FIELDS = new org.apache.hadoop.hive.metastore.api.Table( "table_name", "db_name", "owner_name", 1234567890, 1234567891, 34, TEST_STORAGE_DESCRIPTOR_WITH_UNSUPPORTED_FIELDS, ImmutableList.of( new FieldSchema("pk1", "string", "comment pk1"), new FieldSchema("pk2", "string", null)), ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3"), "view original text", "view extended text", "MANAGED_TABLE"); private static final org.apache.hadoop.hive.metastore.api.Partition TEST_PARTITION_WITH_UNSUPPORTED_FIELDS = new org.apache.hadoop.hive.metastore.api.Partition( ImmutableList.of("pk1v", "pk2v"), "db_name", "table_name", 1234567892, 1234567893, TEST_STORAGE_DESCRIPTOR_WITH_UNSUPPORTED_FIELDS, ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3")); @Test public void testTableRoundTrip() throws Exception { Table table = MetastoreUtil.fromMetastoreApiTable(TEST_TABLE); PrincipalPrivileges privileges = new PrincipalPrivileges(ImmutableMultimap.of(), ImmutableMultimap.of()); org.apache.hadoop.hive.metastore.api.Table metastoreApiTable = MetastoreUtil.toMetastoreApiTable(table, privileges); assertEquals(metastoreApiTable, TEST_TABLE); } @Test public void testPartitionRoundTrip() { Partition partition = MetastoreUtil.fromMetastoreApiPartition(TEST_PARTITION); org.apache.hadoop.hive.metastore.api.Partition metastoreApiPartition = MetastoreUtil.toMetastoreApiPartition(partition); assertEquals(metastoreApiPartition, TEST_PARTITION); } @Test public void testHiveSchemaTable() { Properties expected = MetaStoreUtils.getTableMetadata(TEST_TABLE_WITH_UNSUPPORTED_FIELDS); Properties actual = MetastoreUtil.getHiveSchema(MetastoreUtil.fromMetastoreApiTable(TEST_TABLE_WITH_UNSUPPORTED_FIELDS)); assertEquals(actual, expected); } @Test public void testHiveSchemaPartition() { Properties expected = MetaStoreUtils.getPartitionMetadata(TEST_PARTITION_WITH_UNSUPPORTED_FIELDS, TEST_TABLE_WITH_UNSUPPORTED_FIELDS); Properties actual = MetastoreUtil.getHiveSchema(MetastoreUtil.fromMetastoreApiPartition(TEST_PARTITION_WITH_UNSUPPORTED_FIELDS), MetastoreUtil.fromMetastoreApiTable(TEST_TABLE_WITH_UNSUPPORTED_FIELDS)); assertEquals(actual, expected); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Writing to sorted and/or skewed table/partition is not supported") public void testTableRoundTripUnsupported() throws Exception { Table table = MetastoreUtil.fromMetastoreApiTable(TEST_TABLE_WITH_UNSUPPORTED_FIELDS); MetastoreUtil.toMetastoreApiTable(table, null); } @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Writing to sorted and/or skewed table/partition is not supported") public void testPartitionRoundTripUnsupported() { Partition partition = MetastoreUtil.fromMetastoreApiPartition(TEST_PARTITION_WITH_UNSUPPORTED_FIELDS); MetastoreUtil.toMetastoreApiPartition(partition); } }