gpt4 book ai didi

hive - 了解 Hive 表创建符号

转载 作者:行者123 更新时间:2023-12-03 23:46:53 25 4
gpt4 key购买 nike

我遇到过 Hive 表,我需要将其转换为 Redshift/MySql 等价物。
我无法理解 Hive 查询结构,希望得到一些帮助:

CREATE TABLE IF NOT EXISTS table_1 (
id BIGINT,
price DOUBLE,
asset string
)
PARTITIONED BY (
pt STRING
);
ALTER TABLE table_1 DROP IF EXISTS PARTITION (pt== '${yyyymmdd}');

INSERT OVERWRITE TABLE table_1 PARTITION (pt= '${yyyymmdd}')
select aa.id,aa.price,aa.symbol from
...
...
from
table_2 table

我无法理解 PARTITIONED BY 子句。如果我理解正确,这与 MySQL 表分区不同,并且是 Hive 特定的动态分区。
分区不定义列或键,按当前日期进行分区。

这是否意味着 table_1 按日期分区?每天有单独的分区吗?

然后稍后在代码中有类似于的符号
inner join table_new table on table.pt = '${yyyymmdd}' and ...

在这种情况下,这是否意味着仅在 yyyymmdd 上插入行?被选中加入?

谢谢你。

最佳答案

Hive 中的分区默认是 HDFS 中的一个文件夹,名称为 key=value + Hive 元存储中的元数据。您可以更改分区位置并在任何文件夹的顶部创建分区。

PARTITIONED BY (pt STRING)定义类型为 的分区列 pt字符串 ,不是约会。分区值存储在元数据中。 pt 列不存在于表数据文件中,它仅在 PARTITIONED BY 中定义,所有分区值都存储在元数据中。如果您动态加载分区,则会创建名为 pt='value' 的分区文件夹。

这句话动态创建分区:

INSERT OVERWRITE TABLE table_1 PARTITION (pt) 
select id, price, symbol
coln as pt --partition column should be the last one
from ...

这句话加载单个 STATIC 分区:
INSERT OVERWRITE TABLE table_1 PARTITION (pt= '${yyyymmdd}') 
select aa.id,aa.price,aa.symbol
from

没有选择分区列,分区值在
PARTITION  (pt= '${yyyymmdd}')
'${yyyymmdd}'这是一个名为 yyyymmdd 的参数使用 --hivevar 传递给脚本像这样:
 hive --hivevar yyyymmdd=20200604 -f myscript.sql 

在这种情况下,您可以将任何字符串作为分区值传递,但参数名称 yyyymmdd 表明它的格式。

Hive 中的 BTW 日期格式是 'yyyy-MM-dd' 'yyyy-MM-dd' 中的字符串格式可以隐式转换为 DATE。

关于hive - 了解 Hive 表创建符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62187799/

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