我有一个示例的hive表创建为
CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>);
Run Code Online (Sandbox Code Playgroud)
数据可以视为
SELECT foo FROM union_test;
Run Code Online (Sandbox Code Playgroud)
输出是
{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":5,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:9}
{1:10.0}
Run Code Online (Sandbox Code Playgroud)
第一个字段(tag)表示union的类型(0表示int,1表示double,2表示数组等).
我的问题是,如果我发现只选择那些联合类型为2(数组)的记录,我应该如何构建我的查询?
我有一个基于 avro 架构的配置单元表。该表是使用以下查询创建的
CREATE EXTERNAL TABLE datatbl
PARTITIONED BY (date String, int time)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES (
'avro.schema.url'='path to schema file on HDFS')
STORED as INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION '<path on hdfs>'
到目前为止,我们一直通过设置以下属性向表中插入数据
hive> set hive.exec.compress.output=true;
hive> set avro.output.codec=snappy;
但是,如果有人忘记设置上述两个属性,则无法实现压缩。我想知道是否有一种方法可以强制对表本身进行压缩,以便即使未设置上述两个属性,数据也始终会被压缩?