我有一个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 '#'