gpt4 book ai didi

hadoop - 为什么这个简单的 Hive 表声明有效?仿佛变魔术

转载 作者:可可西里 更新时间:2023-11-01 16:31:06 26 4
gpt4 key购买 nike

以下 HQL 用于在 HDInsight 中创建一个我可以成功查询的 Hive 表。但是,我有几个关于它为何有效的问题:

  1. 事实上,我的数据行以回车换行符终止,那么为什么“COLLECTION ITEMS TERMINATED BY\002”有效?\002 到底是什么?并且没有指定 blob 的位置,所以,为什么这行得通?

  2. 创建同一个表并指定“CREATE EXTERNAL TABLE...LOCATION '/user/hive/warehouse/salesorderdetail'”的所有尝试都失败了。表已创建但没有返回数据。离开“外部”并且不指定任何位置,突然它起作用了。什么鬼?

    CREATE TABLE IF NOT EXISTS default.salesorderdetail(        SalesOrderID int,        ProductID int,        OrderQty int,        LineTotal decimal        )    ROW FORMAT DELIMITED        FIELDS TERMINATED BY ','        COLLECTION ITEMS TERMINATED BY '\002'        MAP KEYS TERMINATED BY '\003'    STORED AS TEXTFILE

非常感谢任何见解。

更新:感谢到目前为止的帮助。这是我用来尝试创建外部表的确切语法。 (我只更改了存储帐户名称。)我看不出我做错了什么。

drop table default.salesorderdetailx;CREATE EXTERNAL TABLE default.salesorderdetailx(SalesOrderID int,       ProductID int,       OrderQty int,       LineTotal decimal)ROW FORMAT DELIMITED        FIELDS TERMINATED BY ','        COLLECTION ITEMS TERMINATED BY '\002'        MAP KEYS TERMINATED BY '\003'STORED AS TEXTFILELOCATION 'wasb://mycn-1@my.blob.core.windows.net/mycn-1/hive/warehouse/salesorderdetailx'

最佳答案

  1. 在 HDInsight 中创建集群时,您必须指定底层 blob 存储。它假定您正在引用该 blob 存储。您不需要指定位置,因为您的查询正在创建一个在默认位置创建的内部表(请参阅下面的答案 #2)。外部表需要在 Azure blob 存储(集群外部)中指定一个位置,以便在删除集群时不会删除表中的数据。参见 the Hive DDL想要查询更多的信息。

  2. 默认情况下,表创建为内部表,您必须指定“外部”才能使它们成为外部表。

    在以下情况下使用 EXTERNAL 表:

    • 数据在 Hive 外部使用
    • 您需要实时更新数据
    • 删除集群或表时需要数据
    • Hive 不应拥有数据和控制设置、目录等。

在以下情况下使用内部表:

  • 您希望 Hive 管理数据和存储
  • 短期使用(如临时表)
  • 根据现有表创建表(AS SELECT)

您的 blob 存储中是否存在容器“user/hive/warehouse/salesorderdetail”?这也许可以解释为什么您的外部表查询失败了。

关于hadoop - 为什么这个简单的 Hive 表声明有效?仿佛变魔术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com