为什么这个简单的配置单元表声明可以工作?就像变魔术一样

qaxu7uf2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(307)

下面的hql可以在hdinsight中创建一个配置单元表,我可以成功地查询它。但是,我有几个问题关于它为什么起作用:
实际上,我的数据行是由回车换行符终止的,那么为什么“collection items terminated by \002”起作用呢?那么\002是什么?而且没有指定blob的位置,所以,再说一次,为什么这个工作?
创建同一个表并指定“create external table…location'/user/hive/warehouse/salesforderdetail'”的所有尝试均失败。表已创建,但未返回任何数据。离开“外部”和不指定任何位置,突然它的作品。世界跆拳道联盟?

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

如有任何见解,我们将不胜感激。
update:thanks for 目前为止的帮助。下面是我用来尝试创建外部表的确切语法(我只更改了存储帐户名。)我不知道我做错了什么。

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 TEXTFILE
LOCATION 'wasb://mycn-1@my.blob.core.windows.net/mycn-1/hive/warehouse/salesorderdetailx'
fruv7luv

fruv7luv1#

在hdinsight中创建集群时,必须指定底层blob存储。它假定您正在引用该blob存储。您不需要指定位置,因为您的查询正在创建一个在默认位置创建的内部表(请参阅下面的答案2)。外部表需要在azure blob存储中指定一个位置(在集群外部),以便在删除集群时不会删除表中的数据。有关详细信息,请参阅配置单元ddl。
默认情况下,表是作为内部表创建的,必须指定“external”才能使它们成为外部表。
在下列情况下使用外部表:
数据在Hive外使用
你需要实时更新数据
删除集群或表时需要数据
配置单元不应该拥有数据和控制设置、目录等。
在下列情况下使用内部表:
您希望hive管理数据和存储
短期使用(如临时表)
基于现有表创建表(如选择)
blob存储中是否存在容器“user/hive/warehouse/salesorderdetail”?这可能解释了为什么外部表查询失败。

相关问题