我有一张用gzip压缩的 hive table。
表格创建
CREATE TABLE table_text (id int, xml string)
PARTITIONED BY (year string, month string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
TBLPROPERTIES ('textinputformat.record.delimiter'='#');
xml列包含的xmls数据打印得很漂亮。这就是为什么要选择不同的行分隔符。
从另一个表加载数据
SET hive.exec.compress.output=true;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
INSERT OVERWRITE table table_text partition(year=2016,month=2)
select id, decompress(xml) from table_avro;
验证负载
Select count(*) from table_text;
这会给出一条记录,因为源表\u avro也有一条记录。
sqoop导出
我想将这个gzip压缩数据从这个配置单元表导出到mysql表。
sqoop export --connect jdbc:mysql://localhost/test --driver com.mysql.jdbc.Driver --username hive --password hive --table mysql_table_export --hcatalog-table table_text --input-fields-terminated-by '|' --input-lines-terminated-by '#'
这会将14000多行导出到mysql表。事实上,xml有14000多行。
如何指定输入数据行和字段分隔符,以便正确读取和导出数据?是否还需要指定输出分隔符?
更新示例:
表\文本-这只是一个示例,因为我无法粘贴实际的,但它看起来像。xml跨越多行。
1000|<parent><child>sample
</child></parent>
暂无答案!
目前还没有任何答案,快来回答吧!