【问题标题】:When to use Sqoop --create-hive-table何时使用 Sqoop --create-hive-table
【发布时间】:2015-10-09 12:24:08
【问题描述】:

谁能说出create-hive-tablehive-import 方法之间的区别?两者都会创建一个 hive 表,但是每个的意义是什么?

【问题讨论】:

    标签: hive sqoop


    【解决方案1】:

    hive-import 命令:
    hive-import 命令自动填充 hive 元存储中填充表的元数据。如果 Hive 中的表还不存在,Sqoop 将简单地根据为您的表或查询获取的元数据创建它。如果表已经存在,Sqoop 会将数据导入到现有表中。如果您要创建新的 Hive 表,Sqoop 会将源表中每一列的数据类型转换为与 Hive 兼容的类型。
    create-hive-table 命令:
    Sqoop 可以基于来自现有关系数据源的表生成一个配置单元表(使用create-hive-tablecommand)。如果设置,则如果目标 hive 表存在,则作业将失败。默认情况下,此属性为 false。

    使用create-hive-table 命令涉及三个步骤:将数据导入HDFS,创建hive 表,然后将HDFS 数据加载到Hive。这可以通过使用hive-import 缩短为一步。

    hive-import 期间,Sqoop 将首先将正常的 HDFS 导入到临时位置。成功导入后,Sqoop 会生成两个查询:一个用于创建表,另一个用于从临时位置加载数据。您可以使用--target-dir--warehouse-dir 参数指定任何临时位置。

    为上述说明添加了一个示例

    使用 create-hive-table 命令:
    涉及三个步骤:

    1. 将数据从 RDBMS 导入 HDFS

      sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --split-by empid -m 1;

    2. 使用create-hive-table 命令创建配置单元表

      sqoop create-hive-table --connect jdbc:mysql://localhost:3306/hadoopexample --table employees --fields-terminated-by ',';

    3. 将数据加载到 Hive 中

      hive> load data inpath "employees" into table employees; Loading data to table default.employees Table default.employees stats: [numFiles=1, totalSize=70] OK Time taken: 2.269 seconds hive> select * from employees; OK 1001 emp1 101 1002 emp2 102 1003 emp3 101 1004 emp4 101 1005 emp5 103 Time taken: 0.334 seconds, Fetched: 5 row(s)

    使用 hive-import 命令:

    sqoop import --connect jdbc:mysql://localhost:3306/hadoopexample --table departments --split-by deptid -m 1 --hive-import;

    【讨论】:

    • 我认为用户指南中的这种复制和粘贴并不是特别有用。
    • 但是当我多次尝试使用这个命令时,我没有得到错误,比如表已经存在..这是我尝试的命令.. sqoop create-hive-table --connect jdbc :mysql://localhost:3306/TestDB -username root -password root --table tb2; ..你能解释一下“create-hive-table 命令涉及三个步骤”是什么意思吗..你能给我这个示例命令吗?再次感谢:)
    • 请告诉我下面两个命令有什么区别 sqoop-import --connect jdbc:mysql://localhost:3306/db1 -username root -password password --table tableName --hive -table tableName --create-hive-table --hive-import
    【解决方案2】:

    不同之处在于 create-hive-table 将根据数据库中的源表在 Hive 中创建表,但不会传输任何数据。命令“import --hive-import”将在 Hive 中创建表并从源表中导入数据。

    【讨论】:

    • 这是创建内部表还是外部表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多