hbase查询语句_Sqoop实操|Sqoop导入Parquet文件Hive查询为null问题
作者:余楓
1
問題重現(xiàn)
1.在MySQL中建表,一個bigint字段,二個varchar字段
2.在Hive中建Parquet表
create?table?test(s1?string?comment?'字段1',
s2?string?comment?'字段2',
s3?string?comment?'字段3'
)?comment?'測試表'
stored?as?parquet;
3.使用Sqoop從MySQL導入數(shù)據(jù)到HDFS,要導入的目錄是Hive中新建表的數(shù)據(jù)目錄
sqoop?import?--connect?jdbc:mysql://192.168.0.178:3306/test?--username?root?--password?123456?--query?"select?cast(\`s1\`?as?char),cast(\`s2\`?as?char),cast(\`s3\`?as?char)?from?\`test_sqoop\`?where?(?1=1?)?and?\$CONDITIONS"?--as-parquetfile?--append?--target-dir?/user/hive/warehouse/tsqoop.db/test?--m?14.查看導入HDFS的文件格式
/opt/cloudera/parcels/CDH/lib/parquet/bin/parquet-tools?meta?./5fc2fe2c-10da-4aae-b432-c2b70542bfaf.parquet5.數(shù)據(jù)導入成功后查看Hive表的數(shù)據(jù)
Hive中查看,查詢出的數(shù)據(jù)為null
Impala中查看,可以正常查看數(shù)據(jù)
2
問題分析
在Sqoop抽取MySQL到HDFS的命令中,使用的是query方式,并且語句中使用了cast(s1 as char)的方式,這樣查詢出來的結果列名產生了變化,不是原來的s1。
由上圖可見,列名變化了,因此產生的Parquet數(shù)據(jù)文件中的列名與Hive中建表時定義的列名不同。而在Hive中默認使用名字來查詢Parquet的列,所以在Hive中查詢出的數(shù)據(jù)都是null;而在Impala中,則是以位置來查詢,所以在Impala中能夠正常的查詢到數(shù)據(jù)。
3
問題解決
解決方式有兩種,如下:
1.Sqoop命令從MySQL中抽取數(shù)據(jù)到HDFS時,query語句中指定Hive建表時定義的列名。
·修改Sqoop命令如下,在query中指定Hive表定義的列名
sqoop?import?--connect?jdbc:mysql://192.168.0.178:3306/test?--username?root?--password?123456?--query?"select?cast(\`s1\`?as?char)?s1,cast(\`s2\`?as?char)?s2,cast(\`s3\`?as?char)?s3?from?\`test_sqoop\`?where?(?1=1?)?and?\$CONDITIONS"?--as-parquetfile?--append?--target-dir?/user/hive/warehouse/tsqoop.db/test?--m?1·在Hive中進行查詢,查詢成功
·在Impala中進行查詢,查詢成功
2.在Hive中執(zhí)行命令set parquet.column.index.access=true;
這個參數(shù)的意義是在Hive中以列的序號來訪問Parquet數(shù)據(jù)文件,該參數(shù)默認設置為false,即默認是以列名來訪問Parquet數(shù)據(jù)文件。
·在Hive中進行設置
·在Hive中進行查詢,查詢成功
·在Impala中進行查詢,查詢成功
4
總結
1.使用Sqoop命令進行數(shù)據(jù)抽取為Parquet格式時,如果導入的數(shù)據(jù)的列名與Hive建表時定義的列名不一致,會導致Hive中查詢到數(shù)據(jù)為null,因為Hive默認使用列名來訪問Parqeut數(shù)據(jù)文件,可以通過參數(shù)set parquet.column.index.access=true來修改訪問方式。
2.在Hive和Impala中,默認訪問Parquet數(shù)據(jù)文件的方式不一樣,Hive是以列名,Impala是以位置,這一點需要注意。
大家工作學習遇到HBase技術問題,把問題發(fā)布到HBase技術社區(qū)論壇http://hbase.group,歡迎大家論壇上面提問留言討論。想了解更多HBase技術關注HBase技術社區(qū)公眾號(微信號:hbasegroup),非常歡迎大家積極投稿。
總結
以上是生活随笔為你收集整理的hbase查询语句_Sqoop实操|Sqoop导入Parquet文件Hive查询为null问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cent 8.0 安装tomcat 9.
- 下一篇: spring bean加载过程_Spri