private static void assertPrimitiveField(Map<String, ColumnMetadata> map, String name, Type type, boolean partitionKey) { assertTrue(map.containsKey(name)); ColumnMetadata column = map.get(name); assertEquals(column.getType(), type, name); assertEquals(column.getComment(), annotateColumnComment(null, partitionKey)); }
private static Function<HiveColumnHandle, ColumnMetadata> columnMetadataGetter(Table table, TypeManager typeManager) { ImmutableList.Builder<String> columnNames = ImmutableList.builder(); table.getPartitionKeys().stream().map(FieldSchema::getName).forEach(columnNames::add); table.getSd().getCols().stream().map(FieldSchema::getName).forEach(columnNames::add); List<String> allColumnNames = columnNames.build(); if (allColumnNames.size() > Sets.newHashSet(allColumnNames).size()) { throw new PrestoException(HIVE_INVALID_METADATA, format("Hive metadata for table %s is invalid: Table descriptor contains duplicate columns", table.getTableName())); } List<FieldSchema> tableColumns = table.getSd().getCols(); ImmutableMap.Builder<String, String> builder = ImmutableMap.builder(); for (FieldSchema field : concat(tableColumns, table.getPartitionKeys())) { if ((field.getComment() != null) && !field.getComment().equals("from deserializer")) { builder.put(field.getName(), field.getComment()); } } Map<String, String> columnComment = builder.build(); return handle -> new ColumnMetadata( handle.getName(), typeManager.getType(handle.getTypeSignature()), annotateColumnComment(columnComment.get(handle.getName()), handle.isPartitionKey()), false); }
public void createPartitionedTableAs(HiveStorageFormat storageFormat) throws Exception { @Language("SQL") String createTable = "" + "CREATE TABLE test_create_partitioned_table_as " + "WITH (" + "format = '" + storageFormat + "', " + "partitioned_by = ARRAY[ 'SHIP_PRIORITY', 'ORDER_STATUS' ]" + ") " + "AS " + "SELECT orderkey AS order_key, shippriority AS ship_priority, orderstatus AS order_status " + "FROM tpch.tiny.orders"; assertUpdate(createTable, "SELECT count(*) from orders"); TableMetadata tableMetadata = getTableMetadata("test_create_partitioned_table_as"); assertEquals(tableMetadata.getMetadata().getProperties().get(STORAGE_FORMAT_PROPERTY), storageFormat); List<String> partitionedBy = ImmutableList.of("ship_priority", "order_status"); assertEquals(tableMetadata.getMetadata().getProperties().get(PARTITIONED_BY_PROPERTY), partitionedBy); for (ColumnMetadata columnMetadata : tableMetadata.getColumns()) { boolean partitionKey = partitionedBy.contains(columnMetadata.getName()); assertEquals(columnMetadata.getComment(), annotateColumnComment(null, partitionKey)); } List<HivePartition> partitions = getPartitions("test_create_partitioned_table_as"); assertEquals(partitions.size(), 3); assertQuery("SELECT * from test_create_partitioned_table_as", "SELECT orderkey, shippriority, orderstatus FROM orders"); assertUpdate("DROP TABLE test_create_partitioned_table_as"); assertFalse(queryRunner.tableExists(getSession(), "test_create_partitioned_table_as")); }
for (ColumnMetadata columnMetadata : tableMetadata.getColumns()) { boolean partitionKey = partitionedBy.contains(columnMetadata.getName()); assertEquals(columnMetadata.getComment(), annotateColumnComment(null, partitionKey));
column.getName(), column.getType(), annotateColumnComment(column.getComment(), partitionedBy.contains(column.getName())), false)) .collect(toList());