sqoop從mysql導入hive parquet表timestamp,decimal轉換問題

注意兩個地方:
1.時間轉換問題:timestamp、date,time
以上時間類型會被sqoop轉成int,long型,無法直接轉成時間類型
如果要轉的有兩個辦法:

  • 1)轉成long型,再用from_unixtime轉回來,才能看時間(太麻煩)-----parquet表的類型對應爲bigint
    select *, from_unixtime(cast(SOURCE_LOAD_DATE as BIGINT) DIV 1000000) as SOURCE_LOAD_DATE from table_name;
  • 2)直接轉成string型(直觀,可以直接看)------parquet表的數據類型對應爲string
    如果非要轉成timestamp可用

另外: 處理datetime中有null的情況
在sql connnect中加入:zeroDateTimeBehavior=convertToNull
如:

--connect jdbc:mysql://192.168.1.100/test?zeroDateTimeBehavior=convertToNull

參考:https://avro.apache.org/docs/current/spec.html

2.浮點類型(float,double,decimal)
啓用decimal 必須要加以下參數:

-Dsqoop.avro.decimal_padding.enable=true -Dsqoop.parquet.logical_types.decimal.enable=true
-Dsqoop.avro.logical_types.decimal.default.precision=38
-Dsqoop.avro.logical_types.decimal.default.scale=10

—parquet中對應的數據類型爲decimal(precision,scale),如decimal(19,3)

參考:https://archive.cloudera.com/cdh6/6.2.0/docs/sqoop-1.4.7-cdh6.2.0/SqoopUserGuide.html#_enabling_logical_types_in_avro_and_parquet_import_for_numbers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章