日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hbase查询语句_Sqoop实操|Sqoop导入Parquet文件Hive查询为null问题

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hbase查询语句_Sqoop实操|Sqoop导入Parquet文件Hive查询为null问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:余楓

1

問題重現

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導入數據到HDFS,要導入的目錄是Hive中新建表的數據目錄

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?1

4.查看導入HDFS的文件格式

/opt/cloudera/parcels/CDH/lib/parquet/bin/parquet-tools?meta?./5fc2fe2c-10da-4aae-b432-c2b70542bfaf.parquet

5.數據導入成功后查看Hive表的數據

Hive中查看,查詢出的數據為null

Impala中查看,可以正常查看數據

2

問題分析

在Sqoop抽取MySQL到HDFS的命令中,使用的是query方式,并且語句中使用了cast(s1 as char)的方式,這樣查詢出來的結果列名產生了變化,不是原來的s1。

由上圖可見,列名變化了,因此產生的Parquet數據文件中的列名與Hive中建表時定義的列名不同。而在Hive中默認使用名字來查詢Parquet的列,所以在Hive中查詢出的數據都是null;而在Impala中,則是以位置來查詢,所以在Impala中能夠正常的查詢到數據。

3

問題解決

解決方式有兩種,如下:

1.Sqoop命令從MySQL中抽取數據到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中執行命令set parquet.column.index.access=true;

這個參數的意義是在Hive中以列的序號來訪問Parquet數據文件,該參數默認設置為false,即默認是以列名來訪問Parquet數據文件。

·在Hive中進行設置

·在Hive中進行查詢,查詢成功

·在Impala中進行查詢,查詢成功

4

總結

1.使用Sqoop命令進行數據抽取為Parquet格式時,如果導入的數據的列名與Hive建表時定義的列名不一致,會導致Hive中查詢到數據為null,因為Hive默認使用列名來訪問Parqeut數據文件,可以通過參數set parquet.column.index.access=true來修改訪問方式。

2.在Hive和Impala中,默認訪問Parquet數據文件的方式不一樣,Hive是以列名,Impala是以位置,這一點需要注意。

大家工作學習遇到HBase技術問題,把問題發布到HBase技術社區論壇http://hbase.group,歡迎大家論壇上面提問留言討論。想了解更多HBase技術關注HBase技術社區公眾號(微信號:hbasegroup),非常歡迎大家積極投稿。

總結

以上是生活随笔為你收集整理的hbase查询语句_Sqoop实操|Sqoop导入Parquet文件Hive查询为null问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。