我正在使用Cloudera的QuckStart CDH5.4 VMware镜像。它的sqoop为1.4.5。
我从一个非常简单的Oracle数据库10g企业版10.2.0.4.0版 - 64位生产表导入:
create table SIMPLETBL (
id NUMBER(38,0),
firstname varchar2(64),
lastname varchar2(64),
entry date
);
使用此sqoop
调用导入HDFS中的暂存目录:
#!/bin/bash
sqoop import \
--verbose \
--username theuser --password thepassword \
--connect jdbc:oracle:thin:@x.y.z.x:1565:sidd \
--table THEUSER.SIMPLETBL \
--target-dir /archive/xxx/stage_pk \
-m 1 --as-parquetfile
HDFS目录/archive/xxx/stage_pk
由sqoop
创建,单个文件最终在其中。我把它搬到了镶木桌子的目录:
hdfs dfs -mv /archive/xxx/stage_pk/\* /archive/xxx/pktbl
impala-shell
告诉我关于我的拼花文件表:
[quickstart.cloudera:21000] > select * from pktbl limit 10;
Query: select * from pktbl limit 10
ERROR: File 'hdfs://quickstart.cloudera:8020/archive/xxx/pktbl/afd5eba5-b1e9-462b-9e23-3df6dcdfab22.parquet'
has an incompatible type with the table schema for column 'ID'.
Expected type: INT32. Actual type: BYTE_ARRAY
两列firstname
和lastname
似乎正确进入Parquet表,但DATE格式列没有:
[quickstart.cloudera:21000] > select entry from pktbl limit 10;
Query: select entry from pktbl limit 10
ERROR: File 'hdfs://quickstart.cloudera:8020/archive/xxx/pktbl/afd5eba5-b1e9-462b-9e23-3df6dcdfab22.parquet'
has an incompatible type with the table schema for column 'ENTRY'.
Expected type: INT96. Actual type: INT64
让sqoop
创建impala
可以理解的Parquet文件是否有一些技巧?似乎sqoop
1.4.5获取除“string”之外的每种数据类型。