【发布时间】:2017-02-26 08:49:44
【问题描述】:
HDP-2.5.0.0 使用 Ambari 2.4.0.1
有几个 SQL Server 和 Oracle 数据库架构需要导入到 HDFS/Hive。
目前的方法运行良好:
- Sqoop 以 avro 格式从 RDBMS 导入 HDFS
- 在 avro 文件上创建 Hive 外部表,即。 dataaggregate_avro_compressed
- 从 step.2 创建最终表。 自动执行此步骤
- 将第 2 步中的表格中的数据插入到最终表格中
现在,第 3 步。表必须是 ORC + COMPRESSED + PARTITIONED 并且可能是 MANAGED。手动,可以完成以下操作:
CREATE TABLE `dataaggregate_orc_empty`( ......)PARTITIONED BY (`datedimensionid` bigint) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' TBLPROPERTIES ('orc.compress'='ZLIB');
但它是自动创建是一个挑战,我正在努力使用以下方法:
-
CTAS 空表
CREATE TABLE dataaggregate_orc_empty LIKE dataaggregate_avro_compressed ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 存储为 INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT ' org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' TBLPROPERTIES ('orc.compress'='ZLIB');
现在,此表包含需要从表中删除的分区列 datedimensionid,但不支持“更改表删除列”
-
CTAS 使用REGEX column spec。 :
设置 hive.support.quoted.identifiers=none; CREATE TABLE dataaggregate_orc_empty AS SELECT
(datedimensionid)?+.+FROM dataaggregate_avro_compressed limit 0;
这将创建没有分区列 datedimensionid 的表,但是现在如何更改这个空表以包含分区列,这就是第一种方法遇到的问题! documentation talks about adding partitions 有一个规范,但我在这个阶段没有一个 - 我只是希望这个表和手动创建的一样(显示在帖子的开头)。
我该怎么做?
【问题讨论】:
-
HiveMetaStoreClient可能对您的要求有所帮助。我以这种方式给出了示例方法,我们修改了分区。你可以试试