我有一個hive表架構存儲在一個hdfs文件schema.avsc中。 我想創建一個相同模式的配置單元表,並希望從其他數據存儲在HDFS文件系統中的hdfs路徑轉儲數據。從.avsc文件中存儲的表架構創建配置單元表
1:如何創建表格? 2:如何將存儲在hdfs文件中的數據轉儲到創建的表中?
我有一個hive表架構存儲在一個hdfs文件schema.avsc中。 我想創建一個相同模式的配置單元表,並希望從其他數據存儲在HDFS文件系統中的hdfs路徑轉儲數據。從.avsc文件中存儲的表架構創建配置單元表
1:如何創建表格? 2:如何將存儲在hdfs文件中的數據轉儲到創建的表中?
如何創建表格?
AvroSerDe上的Apache Hive文檔顯示了基於存儲在文件中的Avro模式創建表的語法。爲方便起見,我將在此重複其中一個示例:
CREATE TABLE kst
PARTITIONED BY (ds string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
TBLPROPERTIES (
'avro.schema.url'='http://schema_provider/kst.avsc');
本示例從Web服務器中提取架構文件。該文檔還顯示其他選項,例如從本地文件中提取,具體取決於您的特定需求。
我推薦閱讀整個AvroSerDe文檔頁面。關於充分利用Hive與Avro一起使用,有很多有用的信息。
如何將存儲在hdfs文件中的數據轉儲到創建的表中?
您可以定義引用現有HDFS文件的外部表。 External Tables的文檔頁面顯示了語法。重複一個例子:
CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '<hdfs_location>';
定義外部表後,您就可以使用INSERT-SELECT查詢,從外部表讀取和寫入的Avro表。有關Inserting data into Hive Tables from queries的文檔描述了INSERT-SELECT語法。例如:
FROM page_view_stg pvs
INSERT OVERWRITE TABLE page_view PARTITION(dt='2008-06-08', country)
SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip, pvs.cnt