使用Sqoop(至少)有两个选项可以将表从Oracle导入Hive。
create-hive-table 工具根据先前导入HDFS的数据库表或计划导入的数据库表填充Hive Metastore,其中包含表的定义。在以下示例中,我们将创建表 emps
$ sqoop create-hive-table \
--connect jdbc:mysql://localhost/dualcore \
--username training \
--password training \
--table employees \
--hive-table emps
然后执行导入 emps 表
$ sqoop import \
--connect jdbc:mysql://localhost/dualcore \
--username training \
--password training \
--m 1 \
--target-dir /queryresult \
--hive-table emps \
--hive-import
https://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_create_hive_table_literal
使用 - hive-import 命令:
示例:
$ sqoop import \
--connect jdbc:mysql://localhost/dualcore \
--username training \
--password training \
--m 1 \
--target-dir /queryresult \
--table employees \
--hive-import
这两个选项中哪一个更好?
答案 0 :(得分:0)
即使第二个选项看起来更有效,但在某些情况下,这是不可能的。
我必须面对的一个案例是你需要在Hive中创建一个外部表。由于Sqoop不支持创建Hive外部表,因此需要另一种解决方法。
(在HDFS上存储数据)
什么是外部表格
如果您:
,请使用外部表格不打算从其他表架构创建表格,例如 将table1创建为(Select * from table2)
即使在DROP之后,数据也需要保留在基础位置 表。如果您指向多个模式(表或表),这可以适用 在单个数据集中或者如果您正在迭代各种数据集 可能的模式。
您想使用自定义位置,例如ASV。
Hive不应该拥有您拥有的数据和控制设置,dirs等 另一个会做这些事情的程序或过程。
(在HDFS上存储数据,但在某种限制区域内)
什么是内部表格
内部表文件安全性仅通过HIVE控制。例如。
tbl_batting只能通过HDFS内部帐户访问:
r =读取w =写入x =执行
删除表会删除元数据&来自masternode和。的数据 HDFS分别
如果您:
,请使用内部表格想暂时存储数据。
想要使用HIVE来管理表格和数据的生命周期。
来源:
有必要从Oracle导入表的样本以创建avro文件,该文件将用于生成hive表。然后将整个表从oracle导入到hdfs。
1生成Avro文件
sqoop import --connect jdbc:oracle:thin:@ // url:port / database \ --username my_user --password my_password -m 1 --fetch-size 10 \ --table table_to_import \ --columns columns_to_import \ --create-hive-table --hive-table dummy_table \ --as-avrodatafile --target-dir hdfs:/// user / my_user / dummytab /
2在本地
中生成架构avro-tools getschema HDFS:// urlhadoop:端口/用户/ my_user / dummytab /部分-M-00000.avro
schematab.avsc
3将架构移回hdfs
hdfs dfs -copyFromLocal schematab.avsc / user / my_user / schemas
4在Hive中创建表
hive -e" CREATE EXTERNAL TABLE MyHiveTable ROW FORMAT SERDE ' org.apache.hadoop.hive.serde2.avro.AvroSerDe'存储为INPUTFORMAT ' org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 输出格式 ' org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'地点 ' HDFS:///用户/ my_user /表/' TBLPROPERTIES (' avro.schema.url' =' HDFS:///user/my_user/schemas/schematab.avsc');"
5导入所有数据
sqoop import --connect jdbc:oracle:thin:@ // url:port / database \ --username my_user --password my_password -m 1 \ --table table_to_import \ --columns columns_to_import \ --hive-table MyHiveTable \ --as-avrodatafile --target-dir hdfs:/// user / my_user / tables / --append