从Hive表导出Sqoop - 指定分隔符

时间:2016-03-10 22:34:33

标签: xml hive export sqoop

我有一个Gzip压缩的蜂巢表。

表格创建

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np

N=5
province=['Ontario','Quebec','BritishColumbia','Manitoba','NovaScoti']
size = [908.607,1356.547,922.509,552.329,651.036]
population = [12851821,7903001,4400057,1208268,4160000]
injuries = [625,752,629,1255,630]

# Choose some random colors
colors=cm.rainbow(np.random.rand(N))

# Use those colors as the color argument
plt.scatter(size,population,s=injuries,color=colors)
for i in range(N):
    plt.annotate(province[i],xy=(size[i],population[i]))
plt.xlabel('Size(*1000km2)')
plt.ylabel('Population(ten million)')

# Move title up with the "y" option
plt.title('The Car Accidents Injuries Rate in 5 Canada Provinces',y=1.05)
plt.show()

xml列包含非常打印的xmls数据。这就是为什么选择不同的行分隔符。

从另一个表中加载数据

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'='#');

验证负载

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;

这给出了一条记录,这很好,因为源表table_avro也有一条记录。

Sqoop export

我想将这个gzip压缩数据从这个hive表导出到mysql表。

Select count(*) from table_text;

这会将14000多行导出到mysql表中。事实上,xml有14000个奇数行。

如何指定输入数据行和字段分隔符,以便正确读取数据并正确导出?是否还需要指定输出分隔符?

更新样本:

table_text - 这只是一个示例,因为我无法粘贴实际,但它看起来像。 XML跨越各行。

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 '#'

0 个答案:

没有答案