【问题标题】:How to create table in Hive with specific column values from another table如何在 Hive 中使用另一个表中的特定列值创建表
【发布时间】:2023-03-16 06:44:01
【问题描述】:

我是 Hive 新手,遇到了一些问题。我试图在这里和其他网站上找到答案,但没有运气......我还尝试了许多不同的查询,但也没有成功。

我有my source table,我想创建new table like this

是:

  • id 将是不同县的数量,作为自动增量数字和主键
  • counties 作为县的不同名称(来自源表)

【问题讨论】:

  • 您可以使用源表中的数据来创建新表。这就是您要找的吗?
  • 另一件事,在 hive 中没有主键之类的东西,所以我不确定你可以定义那个状态。
  • ROW_NUMBER() OVER() AS id - 这是我正在查看的查询部分

标签: hadoop hive hql


【解决方案1】:

您可以遵循这种方法。

A CTAS(创建表作为选择) 以你的例子,这个 CTAS 可以工作

CREATE TABLE t_county 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
STORED AS TEXTFILE AS
WITH t AS(
SELECT DISTINCT county, ROW_NUMBER() OVER() AS id
FROM counties)
SELECT id, county
FROM t;

您不能在 Hive 上拥有主键或外键,因为您在 Oracle 或 MySql 等 RBDMS 上拥有主键,因为 Hive 是读取模式,而不是像 Oracle 那样的写入模式,因此您无法在 Hive 上实现任何类型的约束。

【讨论】:

  • Tnx,我在找这个 - ROW_NUMBER() OVER() AS id
  • 很高兴,如果回答对您有所帮助,请采纳并点赞,谢谢。
【解决方案2】:

我不能给你确切的答案,因为它假设你必须尝试自己做,然后如果你有问题或疑问来这里告诉我们。但是,我可以告诉您的是,您可以使用 insertstatement 使用另一个表中的数据创建一个新表,即:

create table CARS (name string);
insert table CARS select x, y from TABLE_2;

如果您希望删除该表 (CARS) 中的所有现有数据,也可以使用 overwrite 语句。

所以,操作将是

CREATE TABLE ==> INSERT OPERATION (OVERWRITE?) + QUERY OPERATION

【讨论】:

    【解决方案3】:

    Hive 不是 RDBMS 数据库,因此没有主键或外键的概念。 但是您可以在 Hive 中添加自动增量列。请尝试如下:

    Create table new_table as 
    select reflect("java.util.UUID", "randomUUID") id, countries from my_source_table;
    

    【讨论】:

    • 这个很有用,但我当时不需要它,tnx 建议:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多