====
---- QUERY
# Create a table with default fileformat and later change it to Avro using
# alter sql. The query runs with stale metadata and a warning should be raised.
# Invalidating metadata should cause the Avro schema to be properly set upon the
# next metadata load.
CREATE EXTERNAL TABLE alltypesagg_staleschema (
  id INT,
  bool_col BOOLEAN,
  tinyint_col INT,
  smallint_col INT,
  int_col INT,
  bigint_col BIGINT,
  float_col FLOAT,
  double_col DOUBLE,
  date_string_col STRING,
  string_col STRING,
  timestamp_col STRING
)
LOCATION '$FILESYSTEM_PREFIX/test-warehouse/alltypesaggmultifilesnopart_avro_snap'
TBLPROPERTIES ('avro.schema.url'= '$FILESYSTEM_PREFIX/test-warehouse/avro_schemas/functional/alltypesaggmultifilesnopart.json')
====
---- QUERY
alter table alltypesagg_staleschema set fileformat avro
====
---- QUERY
select count(*) from alltypesagg_staleschema
---- CATCH
Missing Avro schema in scan node. This could be due to stale metadata.
====
---- QUERY
invalidate metadata alltypesagg_staleschema
====
---- QUERY
select count(*) from alltypesagg_staleschema
---- RESULTS
11000
---- TYPES
bigint
====
---- QUERY
# Same as above but for partitioned tables.
CREATE EXTERNAL TABLE alltypesagg_staleschema_part (
  id INT,
  bool_col BOOLEAN,
  tinyint_col INT,
  smallint_col INT,
  int_col INT,
  bigint_col BIGINT,
  float_col FLOAT,
  double_col DOUBLE,
  date_string_col STRING,
  string_col STRING,
  timestamp_col STRING
) partitioned by (part_col int)
TBLPROPERTIES ('avro.schema.url'= '$FILESYSTEM_PREFIX/test-warehouse/avro_schemas/functional/alltypesaggmultifilesnopart.json')
====
---- QUERY
alter table alltypesagg_staleschema_part add partition (part_col=1) location '$FILESYSTEM_PREFIX/test-warehouse/alltypesaggmultifilesnopart_avro_snap'
====
---- QUERY
alter table alltypesagg_staleschema_part partition (part_col=1) set fileformat avro
====
---- QUERY
select count(*) from alltypesagg_staleschema_part
---- CATCH
Missing Avro schema in scan node. This could be due to stale metadata.
====
---- QUERY
invalidate metadata alltypesagg_staleschema_part
====
---- QUERY
select count(*) from alltypesagg_staleschema_part
---- RESULTS
11000
---- TYPES
bigint
====
---- QUERY
# IMPALA-3092. Create an Avro table without column definitions and add columns via ALTER
# TABLE. Querying the table should work.
CREATE EXTERNAL TABLE avro_alter_table_add_new_column (
a string,
b string)
STORED AS AVRO
LOCATION '$FILESYSTEM_PREFIX/test-warehouse/tinytable_avro';

ALTER TABLE avro_alter_table_add_new_column ADD COLUMNS (
bool_col boolean,
int_col int,
bigint_col bigint,
float_col float,
double_col double,
timestamp_col timestamp,
decimal_col decimal(2,0),
string_col string)
====
---- QUERY
# Every new column just added should have NULL filled
select * from avro_alter_table_add_new_column
---- RESULTS
'aaaaaaa','bbbbbbb',NULL,NULL,NULL,NULL,NULL,'NULL',NULL,'NULL'
'ccccc','dddd',NULL,NULL,NULL,NULL,NULL,'NULL',NULL,'NULL'
'eeeeeeee','f',NULL,NULL,NULL,NULL,NULL,'NULL',NULL,'NULL'
---- TYPES
string, string, boolean, int, bigint, float, double, string, decimal, string
====
---- QUERY
# IMPALA-3776: Create an Avro table, add a column to the Avro schema and make sure
# describe and describe formatted still work.
CREATE TABLE avro_alter_schema_add_new_column (old_col string) STORED AS AVRO;

ALTER TABLE avro_alter_schema_add_new_column SET TBLPROPERTIES (
'avro.schema.literal'=' {
"namespace": "org.apache.test",
"name": "avro_alter_schema_add_new_column",
"type": "record",
"fields": [
{ "name":"old_col", "type":"string" },
{ "name":"new_col", "type":"string" }
]
}'
);

REFRESH avro_alter_schema_add_new_column;
====
---- QUERY
# The new column now has to show up in describe.
DESCRIBE avro_alter_schema_add_new_column;
---- TYPES
string,string,string
---- RESULTS
'old_col','string','from deserializer'
'new_col','string','from deserializer'
====
---- QUERY
# The new column now has to show up in describe formatted.
DESCRIBE FORMATTED avro_alter_schema_add_new_column;
---- TYPES
string,string,string
---- RESULTS: VERIFY_IS_SUBSET
'old_col','string','from deserializer'
'new_col','string','from deserializer'
====
---- QUERY
# IMPALA-3776: Create an Avro table, remove a column from the Avro schema and make sure
# describe and describe formatted still work.
CREATE TABLE avro_alter_schema_remove_column (col1 string, col2 string) STORED AS AVRO;

ALTER TABLE avro_alter_schema_remove_column SET TBLPROPERTIES (
'avro.schema.literal'=' {
"namespace": "org.apache.test",
"name": "avro_alter_schema_remove_column",
"type": "record",
"fields": [
{ "name":"col1", "type":"string" }
]
}'
);
REFRESH avro_alter_schema_remove_column;
====
---- QUERY
# The new column now must not show up in describe.
DESCRIBE avro_alter_schema_remove_column;
---- TYPES
string,string,string
---- RESULTS
'col1','string','from deserializer'
====
---- QUERY
DESCRIBE FORMATTED avro_alter_schema_remove_column;
---- TYPES
string,string,string
---- RESULTS: VERIFY_IS_SUBSET
'col1','string','from deserializer'
====
