Files
impala/testdata/workloads/functional-query/queries/QueryTest/create.test
Alex Behm 6f0b255c5a Address several shortcomings with respect to the usability of Avro tables.
Addressed JIRAs: IMPALA-1947 and IMPALA-1813

New Feature:
Adds support for creating an Avro table without an explicit
Avro schema with the following syntax.

CREATE TABLE <table_name> column_defs STORED AS AVRO

Fixes and Improvements:
This patch fixes and unifies the logic for reconciling differences between
an Avro table's Avro Schema and its column definitions. This reconciliation
logic is executed during Impala's CREATE TABLE and when loading a table's
metadata. Impala generally performs the schema reconciliation during table
creation, but Hive does not. In many cases, Hive's CREATE TABLE stores the
original column definitions in the HMS (in the StorageDescriptor) instead
of the reconciled column definitions.

The reconciliation logic considers the field/column names and follows this
conflict resolution policy which is similar to Hive's:

Mismatched number of columns -> Prefer Avro columns.
Mismatched name/type -> Prefer Avro column, except:
  A CHAR/VARCHAR column definition maps to an Avro STRING, and is preserved
  as a CHAR/VARCHAR in the reconciled schema.

Behavior for TIMESTAMP:
A TIMESTAMP column definition maps to an Avro STRING and is presented as a STRING
in the reconciled schema, because Avro has no binary TIMESTAMP representation.
As a result, no Avro table may have a TIMESTAMP column (existing behavior).

Change-Id: I8457354568b6049b2dd2794b65fadc06e619d648
Reviewed-on: http://gerrit.cloudera.org:8080/550
Reviewed-by: Alex Behm <alex.behm@cloudera.com>
Tested-by: Internal Jenkins
2015-08-25 09:52:18 +00:00

880 lines
26 KiB
Plaintext

====
---- QUERY
drop table if exists ddl_test_db.temp_legacy_table
---- RESULTS
====
---- QUERY
create table ddl_test_db.temp_legacy_table like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/legacy_nested.parquet'
---- RESULTS
====
---- QUERY
describe ddl_test_db.temp_legacy_table
---- RESULTS
't_long','bigint','inferred from: required int64 t_long'
't_struct','struct<\n f_int:int,\n t_struct:struct<\n f_int:int,\n f_int2:int\n >,\n int_arr:array<int>,\n int_map:map<string,int>\n>','inferred from: required group t_struct {\n required int32 f_int;\n required group t_struct {\n required int32 f_int;\n optional int32 f_int2;\n }\n required group int_arr (LIST) {\n repeated int32 array;\n }\n required group int_map (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n }\n}'
't_array_basic','array<int>','inferred from: required group t_array_basic (LIST) {\n repeated int32 array;\n}'
't_array_struct','array<struct<\n f_int1:int,\n f_int2:int,\n f_int3:int\n>>','inferred from: required group t_array_struct (LIST) {\n repeated group array {\n required int32 f_int1;\n required int32 f_int2;\n optional int32 f_int3;\n }\n}'
't_array_array','array<array<int>>','inferred from: required group t_array_array (LIST) {\n repeated group array (LIST) {\n repeated int32 array;\n }\n}'
't_array_map','array<map<string,int>>','inferred from: required group t_array_map (LIST) {\n repeated group array (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n }\n}'
'map_int','map<string,int>','inferred from: required group map_int (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n}'
'map_struct','map<string,struct<\n f_int:int,\n f_int2:int\n>>','inferred from: required group map_struct (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value {\n required int32 f_int;\n required int32 f_int2;\n }\n }\n}'
'map_array','map<string,array<int>>','inferred from: required group map_array (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value (LIST) {\n repeated int32 array;\n }\n }\n}'
'map_map','map<string,map<string,int>>','inferred from: required group map_map (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n optional int32 value;\n }\n }\n }\n}'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table if exists ddl_test_db.temp_legacy_table
---- RESULTS
====
---- QUERY
drop table if exists ddl_test_db.temp_modern_table
---- RESULTS
====
---- QUERY
create table ddl_test_db.temp_modern_table like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/modern_nested.parquet'
---- RESULTS
====
---- QUERY
describe ddl_test_db.temp_modern_table
---- RESULTS
't_long','bigint','inferred from: required int64 t_long'
't_struct','struct<\n f_int:int,\n t_struct:struct<\n f_int:int,\n f_int2:int\n >,\n int_arr:array<int>,\n int_map:map<string,int>\n>','inferred from: required group t_struct {\n required int32 f_int;\n required group t_struct {\n required int32 f_int;\n optional int32 f_int2;\n }\n required group int_arr (LIST) {\n repeated group list {\n required int32 element;\n }\n }\n required group int_map (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n }\n}'
't_array_basic','array<int>','inferred from: required group t_array_basic (LIST) {\n repeated group list {\n required int32 element;\n }\n}'
't_array_struct','array<struct<\n f_int1:int,\n f_int2:int,\n f_int3:int\n>>','inferred from: required group t_array_struct (LIST) {\n repeated group list {\n required group element {\n required int32 f_int1;\n required int32 f_int2;\n optional int32 f_int3;\n }\n }\n}'
't_array_array','array<array<int>>','inferred from: required group t_array_array (LIST) {\n repeated group list {\n required group element (LIST) {\n repeated group list {\n required int32 element;\n }\n }\n }\n}'
't_array_map','array<map<string,int>>','inferred from: required group t_array_map (LIST) {\n repeated group list {\n required group element (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n }\n }\n}'
'map_int','map<string,int>','inferred from: required group map_int (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required int32 value;\n }\n}'
'map_struct','map<string,struct<\n f_int:int,\n f_int2:int\n>>','inferred from: required group map_struct (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value {\n required int32 f_int;\n required int32 f_int2;\n }\n }\n}'
'map_array','map<string,array<int>>','inferred from: required group map_array (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value (LIST) {\n repeated group list {\n optional int32 element;\n }\n }\n }\n}'
'map_map','map<string,map<string,int>>','inferred from: required group map_map (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n required group value (MAP) {\n repeated group map (MAP_KEY_VALUE) {\n required binary key (UTF8);\n optional int32 value;\n }\n }\n }\n}'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table if exists ddl_test_db.temp_modern_table
---- RESULTS
====
---- QUERY
drop table if exists ddl_test_db.temp_decimal_table
---- RESULTS
====
---- QUERY
create table ddl_test_db.temp_decimal_table like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/decimal.parquet'
---- RESULTS
====
---- QUERY
describe ddl_test_db.temp_decimal_table
---- RESULTS
'd32','decimal(3,2)','inferred from: required fixed_len_byte_array(16) d32 (DECIMAL(3,2))'
'd11','decimal(1,1)','inferred from: required fixed_len_byte_array(16) d11 (DECIMAL(1,1))'
'd1015','decimal(15,10)','inferred from: required fixed_len_byte_array(16) d1015 (DECIMAL(15,10))'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table if exists ddl_test_db.temp_decimal_table
---- RESULTS
====
---- QUERY
create table ddl_test_db.test_like_file_create like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/zipcode_incomes.parquet'
---- RESULTS
====
---- QUERY
describe ddl_test_db.test_like_file_create
---- RESULTS
'id','string','inferred from: optional binary id'
'zip','string','inferred from: optional binary zip'
'description1','string','inferred from: optional binary description1'
'description2','string','inferred from: optional binary description2'
'income','int','inferred from: optional int32 income'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table ddl_test_db.test_like_file_create
---- RESULTS
====
---- QUERY
create table if not exists ddl_test_db.test_like_file_create like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/alltypestiny.parquet'
---- RESULTS
====
---- QUERY
describe ddl_test_db.test_like_file_create
---- RESULTS
'id','int','inferred from: optional int32 id'
'bool_col','boolean','inferred from: optional boolean bool_col'
'tinyint_col','int','inferred from: optional int32 tinyint_col'
'smallint_col','int','inferred from: optional int32 smallint_col'
'int_col','int','inferred from: optional int32 int_col'
'bigint_col','bigint','inferred from: optional int64 bigint_col'
'float_col','float','inferred from: optional float float_col'
'double_col','double','inferred from: optional double double_col'
'date_string_col','string','inferred from: optional binary date_string_col'
'string_col','string','inferred from: optional binary string_col'
'timestamp_col','timestamp','inferred from: optional int96 timestamp_col'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
create table if not exists ddl_test_db.test_like_file_create like parquet
'$FILESYSTEM_PREFIX/test-warehouse/schemas/zipcode_incomes.parquet'
---- RESULTS
====
---- QUERY
# should not have changed since last statement was IF NOT EXISTS
describe ddl_test_db.test_like_file_create
---- RESULTS
'id','int','inferred from: optional int32 id'
'bool_col','boolean','inferred from: optional boolean bool_col'
'tinyint_col','int','inferred from: optional int32 tinyint_col'
'smallint_col','int','inferred from: optional int32 smallint_col'
'int_col','int','inferred from: optional int32 int_col'
'bigint_col','bigint','inferred from: optional int64 bigint_col'
'float_col','float','inferred from: optional float float_col'
'double_col','double','inferred from: optional double double_col'
'date_string_col','string','inferred from: optional binary date_string_col'
'string_col','string','inferred from: optional binary string_col'
'timestamp_col','timestamp','inferred from: optional int96 timestamp_col'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table ddl_test_db.test_like_file_create
---- RESULTS
====
---- QUERY
# It should show up now
show databases like 'ddl_test_db'
---- RESULTS
'ddl_test_db'
---- TYPES
STRING
====
---- QUERY
# Make sure creating a database with the same name doesn't throw an error when
# IF NOT EXISTS is specified.
create database if not exists ddl_test_db
---- RESULTS
====
---- QUERY
show tables in ddl_test_db
---- RESULTS
====
---- QUERY
create table ddl_test_db.testtbl(i int, s string COMMENT 'String col') STORED AS TEXTFILE
---- RESULTS
====
---- QUERY
# Make sure creating a table with the same name doesn't throw an error when
# IF NOT EXISTS is specified.
create table if not exists ddl_test_db.testtbl(i int, s string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
---- RESULTS
====
---- QUERY
show tables in ddl_test_db
---- RESULTS
'testtbl'
---- TYPES
STRING
====
---- QUERY
describe ddl_test_db.testtbl
---- RESULTS
'i','int',''
's','string','String col'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
insert overwrite table ddl_test_db.testtbl SELECT 1, 'Hi'
from functional.alltypes limit 10
---- RESULTS
: 10
====
---- QUERY
select * from ddl_test_db.testtbl
---- RESULTS
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
---- TYPES
INT, STRING
====
---- QUERY
create table ddl_test_db.testtbl_part(i int, s string) PARTITIONED BY (id int comment 'C')
---- RESULTS
====
---- QUERY
# Partition columns are displayed as part of DESCRIBE <table>
describe ddl_test_db.testtbl_part
---- RESULTS
'i','int',''
's','string',''
'id','int','C'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
insert overwrite table ddl_test_db.testtbl_part partition(id=1)
select 10, 'Ten' from functional.alltypes limit 1
---- RESULTS
id=1/: 1
====
---- QUERY
insert overwrite table ddl_test_db.testtbl_part partition(id=2)
select 20, 'Twenty' from functional.alltypes limit 2
---- RESULTS
id=2/: 2
====
---- QUERY
select * from ddl_test_db.testtbl_part
---- RESULTS
10,'Ten',1
20,'Twenty',2
20,'Twenty',2
---- TYPES
INT, STRING, INT
====
---- QUERY
select * from ddl_test_db.testtbl_part where id = 1
---- RESULTS
10,'Ten',1
---- TYPES
INT, STRING, INT
====
---- QUERY
use ddl_test_db
---- RESULTS
====
---- QUERY
show tables
---- RESULTS
'testtbl'
'testtbl_part'
---- TYPES
STRING
====
---- QUERY
# Make sure we create the table in the proper database after a "use"
create table testtbl2(f float, d double) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
---- RESULTS
====
---- QUERY
show tables
---- RESULTS
'testtbl'
'testtbl2'
'testtbl_part'
---- TYPES
STRING
====
---- QUERY
drop table testtbl2
---- RESULTS
====
---- QUERY
show tables
---- RESULTS
'testtbl'
'testtbl_part'
---- TYPES
STRING
====
---- QUERY
# CREATE TABLE LIKE on partitioned table
create table alltypes_test like functional_seq_snap.alltypes
stored as parquet
---- RESULTS
====
---- QUERY
# CREATE TABLE LIKE on a view
create table like_view like functional.view_view
---- RESULTS
====
---- QUERY
describe like_view
---- RESULTS
'id','int',''
'bool_col','boolean',''
'tinyint_col','tinyint',''
'smallint_col','smallint',''
'int_col','int',''
'bigint_col','bigint',''
'float_col','float',''
'double_col','double',''
'date_string_col','string',''
'string_col','string',''
'timestamp_col','timestamp',''
'year','int',''
'month','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
show table stats like_view
---- LABELS
#ROWS, #FILES, SIZE, BYTES CACHED, CACHE REPLICATION, FORMAT, INCREMENTAL STATS, LOCATION
---- RESULTS
-1,0,'0B','NOT CACHED','NOT CACHED','TEXT','false',regex:.*
---- TYPES
BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING
====
---- QUERY
drop table like_view
---- RESULTS
====
---- QUERY
create table like_view_parquet like functional.view_view stored as parquet
---- RESULTS
====
---- QUERY
show table stats like_view_parquet
---- LABELS
#ROWS, #FILES, SIZE, BYTES CACHED, CACHE REPLICATION, FORMAT, INCREMENTAL STATS, LOCATION
---- RESULTS
-1,0,'0B','NOT CACHED','NOT CACHED','PARQUET','false',regex:.*
---- TYPES
BIGINT, BIGINT, STRING, STRING, STRING, STRING, STRING, STRING
====
---- QUERY
drop table like_view_parquet
---- RESULTS
====
---- QUERY
# Make sure no data exists for this table
select count(*) from alltypes_test
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
# Should be able to insert into this table
insert overwrite table alltypes_test
partition (year=2009, month=4)
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col,
float_col, double_col, date_string_col, string_col, timestamp_col
from functional.alltypes where year=2009 and month=4
---- RESULTS
year=2009/month=4/: 300
====
---- QUERY
# Make sure we can read the new data.
select count(*) from alltypes_test
---- RESULTS
300
---- TYPES
BIGINT
====
---- QUERY
# This should copy the file format from the source table (rc)
create external table jointbl_like like functional_rc_gzip.jointbl
location '$FILESYSTEM_PREFIX/test-warehouse/jointbl_rc_gzip'
---- RESULTS
====
---- QUERY
# should get some results back
select * from jointbl_like order by test_id limit 3
---- RESULTS
1001,'Name1',94611,5000
1002,'Name2',94611,5000
1003,'Name3',94611,5000
---- TYPES
BIGINT, STRING, INT, INT
====
---- QUERY
# CREATE TABLE LIKE on unpartitioned table.
create table testtbl_like like testtbl
---- RESULTS
====
---- QUERY
# Make sure the new table can be queried and no data exists for this table.
select count(*) from testtbl_like
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
# No error is thrown when IF NOT EXISTS is specified and the table already exists.
create table if not exists testtbl_like like testtbl
---- RESULTS
====
---- QUERY
# IF NOT EXISTS also applies when the src table is the same as the new table.
create table if not exists testtbl_like like testtbl_like
---- RESULTS
====
---- QUERY
insert overwrite table testtbl_like
select * from testtbl limit 5
---- RESULTS
: 5
====
---- QUERY
# Make sure we can read the data.
select * from testtbl_like
---- RESULTS
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
1,'Hi'
---- TYPES
INT, STRING
====
---- QUERY
# Ensure that a table can be created using CTAS
create table ctas_join stored as parquet as
select j.*, a.int_col, 1*2
from functional.jointbl j join functional_seq_snap.alltypes a
on (j.alltypes_id=a.id)
---- RESULTS
'Inserted 12 row(s)'
---- TYPES
STRING
====
---- QUERY
describe ctas_join
---- RESULTS
'test_id','bigint',''
'test_name','string',''
'test_zip','int',''
'alltypes_id','int',''
'int_col','int',''
'_c2','smallint',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
select * from ctas_join
---- RESULTS
1001,'Name1',94611,5000,0,2
1002,'Name2',94611,5000,0,2
1003,'Name3',94611,5000,0,2
1004,'Name4',94611,5000,0,2
1005,'Name5',94611,5000,0,2
1106,'Name6',94612,5000,0,2
1006,'Name16',94612,5000,0,2
1006,'Name6',94616,5000,0,2
1106,'Name16',94612,5000,0,2
1106,'Name6',94616,5000,0,2
1006,'Name16',94616,5000,0,2
1106,'Name16',94616,5000,0,2
---- TYPES
BIGINT, STRING, INT, INT, INT, SMALLINT
====
---- QUERY
# Since the table already exists, the second CTAS should be a no-op
create table if not exists ctas_join stored as parquet as
select j.*, a.int_col, 1*2
from functional.jointbl j join functional_seq_snap.alltypes a
on (j.alltypes_id=a.id) limit 1
---- RESULTS
'Inserted 0 row(s)'
---- TYPES
STRING
====
---- QUERY
select * from ctas_join
---- RESULTS
1001,'Name1',94611,5000,0,2
1002,'Name2',94611,5000,0,2
1003,'Name3',94611,5000,0,2
1004,'Name4',94611,5000,0,2
1005,'Name5',94611,5000,0,2
1106,'Name6',94612,5000,0,2
1006,'Name16',94612,5000,0,2
1006,'Name6',94616,5000,0,2
1106,'Name16',94612,5000,0,2
1106,'Name6',94616,5000,0,2
1006,'Name16',94616,5000,0,2
1106,'Name16',94616,5000,0,2
---- TYPES
BIGINT, STRING, INT, INT, INT, SMALLINT
====
---- QUERY
# Validate CTAS with LIMIT 0
create table if not exists ctas_join_limit0 stored as textfile as
select * from functional.jointbl limit 0
---- RESULTS
'Inserted 0 row(s)'
---- TYPES
STRING
====
---- QUERY
describe ctas_join_limit0
---- RESULTS
'test_id','bigint',''
'test_name','string',''
'test_zip','int',''
'alltypes_id','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
select * from ctas_join_limit0
---- RESULTS
---- TYPES
BIGINT, STRING, INT, INT
====
---- QUERY
# Validate CTAS with LIMIT 0
create table if not exists ctas_join_limit0 stored as textfile as
select * from functional.jointbl limit 0
---- RESULTS
'Inserted 0 row(s)'
---- TYPES
STRING
====
---- QUERY
select * from ctas_join_limit0
---- RESULTS
---- TYPES
BIGINT, STRING, INT, INT
====
---- QUERY
create table if not exists ctas_join_limit0 stored as textfile as
select * from functional.jointbl limit 4
---- RESULTS
'Inserted 0 row(s)'
---- TYPES
STRING
====
---- QUERY
select * from ctas_join_limit0
---- RESULTS
---- TYPES
BIGINT, STRING, INT, INT
====
---- QUERY
# IMPALA-2203: Test CTAS from a select statement that has outer-joined inline views with
# constant exprs in the select list. The non-matches of the outer join should be NULL.
create table ctas_impala_2203 as
select a.id, a.bool_col, a.tinyint_col, a.smallint_col, a.int_col, a.bigint_col,
b.float_col, b.double_col, b.date_string_col, b.string_col, b.timestamp_col
from
(select id, false bool_col, 1 tinyint_col, 2 smallint_col, 3 int_col, 4 bigint_col
from functional.alltypestiny where id between 0 and 2) a
full outer join
(select id, 5 float_col, 6 double_col, "s1" date_string_col, "s2" string_col,
cast("2009-02-06 00:01:00" as timestamp) timestamp_col
from functional.alltypestiny where id between 1 and 3) b
on (a.id = b.id)
---- RESULTS
'Inserted 4 row(s)'
---- TYPES
STRING
====
---- QUERY
select * from ctas_impala_2203
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0,false,1,2,3,4,NULL,NULL,'NULL','NULL',NULL
1,false,1,2,3,4,5,6,'s1','s2',2009-02-06 00:01:00
2,false,1,2,3,4,5,6,'s1','s2',2009-02-06 00:01:00
NULL,NULL,NULL,NULL,NULL,NULL,5,6,'s1','s2',2009-02-06 00:01:00
---- TYPES
INT, BOOLEAN, TINYINT, TINYINT, TINYINT, TINYINT, TINYINT, TINYINT, STRING, STRING, TIMESTAMP
====
---- QUERY
create table allcomplextypes_clone like functional.allcomplextypes
stored as parquet
---- RESULTS
====
---- QUERY
describe allcomplextypes_clone
---- RESULTS
'id','int',''
'int_array_col','array<int>',''
'array_array_col','array<array<int>>',''
'map_array_col','array<map<string,int>>',''
'struct_array_col','array<struct<\n f1:bigint,\n f2:string\n>>',''
'int_map_col','map<string,int>',''
'array_map_col','map<string,array<int>>',''
'map_map_col','map<string,map<string,int>>',''
'struct_map_col','map<string,struct<\n f1:bigint,\n f2:string\n>>',''
'int_struct_col','struct<\n f1:int,\n f2:int\n>',''
'complex_struct_col','struct<\n f1:int,\n f2:array<int>,\n f3:map<string,int>\n>',''
'nested_struct_col','struct<\n f1:int,\n f2:struct<\n f11:bigint,\n f12:struct<\n f21:bigint\n >\n >\n>',''
'complex_nested_struct_col','struct<\n f1:int,\n f2:array<struct<\n f11:bigint,\n f12:map<string,struct<\n f21:bigint\n >>\n >>\n>',''
'year','int',''
'month','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
# Test creating an unpartitioned Avro table without column definitions.
create table avro_alltypes_nopart
with serdeproperties
('avro.schema.url'='$FILESYSTEM_PREFIX/test-warehouse/avro_schemas/functional/alltypes.json')
stored as avro
---- RESULTS
====
---- QUERY
describe avro_alltypes_nopart
---- RESULTS
'bigint_col','bigint','from deserializer'
'bool_col','boolean','from deserializer'
'date_string_col','string','from deserializer'
'double_col','double','from deserializer'
'float_col','float','from deserializer'
'id','int','from deserializer'
'int_col','int','from deserializer'
'smallint_col','int','from deserializer'
'string_col','string','from deserializer'
'timestamp_col','string','from deserializer'
'tinyint_col','int','from deserializer'
---- TYPES
STRING, STRING, STRING
====
---- QUERY
# Test creating a partitioned Avro table without column definitions.
create table avro_alltypes_part
partitioned by (year int, month int)
with serdeproperties
('avro.schema.url'='$FILESYSTEM_PREFIX/test-warehouse/avro_schemas/functional/alltypes.json')
stored as avro
---- RESULTS
====
---- QUERY
describe avro_alltypes_part
---- RESULTS
'bigint_col','bigint','from deserializer'
'bool_col','boolean','from deserializer'
'date_string_col','string','from deserializer'
'double_col','double','from deserializer'
'float_col','float','from deserializer'
'id','int','from deserializer'
'int_col','int','from deserializer'
'month','int',''
'smallint_col','int','from deserializer'
'string_col','string','from deserializer'
'timestamp_col','string','from deserializer'
'tinyint_col','int','from deserializer'
'year','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
# Test creating a partitioned Avro table without an Avro schema.
# The Avro schema is inferred from the column definitions.
create table no_avro_schema (
c1 tinyint,
c2 smallint comment 'becomes int',
c3 int,
c4 bigint,
c5 float,
c6 double,
c7 timestamp comment 'becomes string',
c8 string,
c9 char(10) comment 'preserved',
c10 varchar(20),
c11 decimal(10, 5),
c12 struct<f1:int,f2:string>,
c13 array<int>,
c14 map<string,string>)
partitioned by (year int, month int)
stored as avro
---- RESULTS
====
---- QUERY
describe no_avro_schema
---- RESULTS
'c1','int','from deserializer'
'c2','int','becomes int'
'c3','int','from deserializer'
'c4','bigint','from deserializer'
'c5','float','from deserializer'
'c6','double','from deserializer'
'c7','string','becomes string'
'c8','string','from deserializer'
'c9','char(10)','preserved'
'c10','varchar(20)','from deserializer'
'c11','decimal(10,5)','from deserializer'
'c12','struct<\n f1:int,\n f2:string\n>','from deserializer'
'c13','array<int>','from deserializer'
'c14','map<string,string>','from deserializer'
'year','int',''
'month','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
# Test creating an Avro table without an Avro schema via CREATE TABLE LIKE (IMPALA-1813)
create table like_no_avro_schema like no_avro_schema stored as avro
---- RESULTS
====
---- QUERY
describe like_no_avro_schema
---- RESULTS
'c1','int','from deserializer'
'c2','int','becomes int'
'c3','int','from deserializer'
'c4','bigint','from deserializer'
'c5','float','from deserializer'
'c6','double','from deserializer'
'c7','string','becomes string'
'c8','string','from deserializer'
'c9','char(10)','preserved'
'c10','varchar(20)','from deserializer'
'c11','decimal(10,5)','from deserializer'
'c12','struct<\n f1:int,\n f2:string\n>','from deserializer'
'c13','array<int>','from deserializer'
'c14','map<string,string>','from deserializer'
'year','int',''
'month','int',''
---- TYPES
STRING, STRING, STRING
====
---- QUERY
drop table like_no_avro_schema
---- RESULTS
====
---- QUERY
drop table no_avro_schema
---- RESULTS
====
---- QUERY
drop table avro_alltypes_part
---- RESULTS
====
---- QUERY
drop table avro_alltypes_nopart
---- RESULTS
====
---- QUERY
drop table allcomplextypes_clone
---- RESULTS
====
---- QUERY
drop table ctas_join
---- RESULTS
====
---- QUERY
drop table ctas_join_limit0
---- RESULTS
====
---- QUERY
drop table ctas_impala_2203
---- RESULTS
====
---- QUERY
drop table testtbl
---- RESULTS
====
---- QUERY
drop table testtbl_part
---- RESULTS
====
---- QUERY
drop table alltypes_test
---- RESULTS
====
---- QUERY
drop table jointbl_like
---- RESULTS
====
---- QUERY
drop table testtbl_like
---- RESULTS
====
---- QUERY
show tables
---- RESULTS
---- TYPES
STRING
====
---- QUERY
drop table if exists non_existent_db.tbl
---- RESULTS
====
---- QUERY
# Need to switch databases before dropping
use default;
drop database ddl_test_db
---- RESULTS
====
---- QUERY
# Should be gone now
show databases like 'ddl_test_db'
---- RESULTS
---- TYPES
STRING
====
---- QUERY
# Test DROP DATABASE ... CASCADE
create database if not exists test_drop_cascade_db
====
---- QUERY
show databases like 'test_drop_cascade_db'
---- RESULTS
'test_drop_cascade_db'
---- TYPES
STRING
====
---- QUERY
create table if not exists test_drop_cascade_db.t1 (i int);
create table if not exists test_drop_cascade_db.t2 (i int)
partitioned by (year smallint, month smallint);
insert into test_drop_cascade_db.t2 partition (year=2015, month=8) values(1);
create external table if not exists test_drop_cascade_db.t3 like functional.alltypes
location '$FILESYSTEM_PREFIX/test-warehouse/alltypes_external';
create view if not exists test_drop_cascade_db.v1 as
select int_col from functional.alltypes;
create function if not exists test_drop_cascade_db.f1() returns string
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdfs.so' symbol='NoArgs';
create aggregate function if not exists test_drop_cascade_db.f2(int, string) RETURNS int
location '$FILESYSTEM_PREFIX/test-warehouse/libTestUdas.so' UPDATE_FN='TwoArgUpdate'
---- RESULTS
====
---- QUERY
show tables in test_drop_cascade_db
---- RESULTS
't1'
't2'
't3'
'v1'
---- TYPES
STRING
====
---- QUERY
show functions in test_drop_cascade_db
---- RESULTS
'STRING','f1()'
---- TYPES
STRING, STRING
====
---- QUERY
show aggregate functions in test_drop_cascade_db
---- RESULTS
'INT','f2(INT, STRING)'
---- TYPES
STRING, STRING
====
---- QUERY
# Should drop all tables and the database
drop database test_drop_cascade_db cascade
---- RESULTS
====
---- QUERY
show databases like 'test_drop_cascade_db'
---- RESULTS
====