是否有办法使用SerDe创建一个Hive外部表,其位置指向Azure存储,其组织方式使得数据使用最少数量的blob。例如,如果插入10000个记录,我希望它只创建100个页面blob,每个包含100个行记录,而不是10000个,每个记录1个记录。我是从blob序列化的,所以更少的blob需要更少的时间。什么是hive中最优化的格式?
答案 0 :(得分:1)
首先,有一种方法可以使用Serde创建Hive外部表,其中locald指向Azure Blob存储,但不是直接创建,请参阅下面的HiveQL部分Create Hive database and tables
。
create database if not exists <database name>;
CREATE EXTERNAL TABLE if not exists <database name>.<table name>
(
field1 string,
field2 int,
field3 float,
field4 double,
...,
fieldN string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '<field separator>' lines terminated by '<line separator>'
STORED AS TEXTFILE LOCATION '<storage location>' TBLPROPERTIES("skip.header.line.count"="1");
并将以下内容集中于解释<storage location>
。
<storage location>
:用于保存Hive表数据的Azure存储位置。如果未指定LOCATION,则默认情况下,数据库和表将存储在Hive集群的默认容器中的hive / warehouse /目录中。如果要指定存储位置,则存储位置必须位于数据库和表的默认容器中。此位置必须以&#39;wasb:///<directory 1>/
&#39;或者&#39;wasb:///<directory 1>/<directory 2>/
&#39;等执行查询后,相关目录将在默认容器中创建。
因此,这意味着您可以通过wasb
协议访问Hive上的Azure Blob存储位置,该协议需要支持Hadoop访问Azure存储上的HDFS的hadoop-azure
库。如果您的Hadoop Hiveop未部署在Azure上,则需要参考Hadoop官方文档Hadoop Azure Support: Azure Blob Storage
进行配置。
对于使用serde,它取决于您使用的文件格式,例如orc文件格式,使用OrcSerde
的hql代码,如下所示。
CREATE EXTERNAL TABLE IF NOT EXSISTS <table name> (<column_name column_type>, ...)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS ORC
LOCATION '<orcfile path>'
对于您的第二种,最佳格式是Hive中的ORC File Format
。