好的,所以我可能稍微超载了标题,但我们正在使用sqoop 1.4.6.2.5.3.0-37(hdp 2.5.3)来提取数据。
当sqoop执行导入时间戳字段时,以毫秒为单位。
postgres架构
Column | Type | Modifiers
------------------+--------------------------+------------------------------------------------------------
id | integer | not null default nextval('foo'::regclass)
x | integer |
y | integer |
z | character varying(255) |
created_at | timestamp with time zone |
updated_at | timestamp with time zone |
hive架构
id int
x int
y int
z string
created_at bigint
updated_at bigint
如何让sqoop导入将时间戳字段视为镶木地板/ avro中的日期?
数据被配置为外部表,因此我们可以使用java / spark之类的东西直接命中它。我尝试了一些不同的字段映射(java),但到目前为止还没有实际保留类型
答案 0 :(得分:0)
Sqoop为这个Postgres表创建一个POJO类。它将created_at
和updated_at
转换为Types.BIGINT
。
这就是为什么你在Hive中获得相应的BIGINT
数据类型的原因。
在配置单元中,时间戳被解释为无时区。如果您尝试在hive的时间戳值中插入2016-02-23 14:00:21.426484-05
,则会为此插入NULL
。
您所能做的就是在VARCHAR
或STRING
尝试添加Java映射
--map-column-java created_at=String, updated_at=String
和hive mapping
--map-column-hive created_at=string, updated_at=string
或
--map-column-hive created_at='varchar(50)', updated_at='varchar(50)'
对于sqoop的默认java和hive映射检查:How sqoop converts sql datatypes into hive