Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 配置单元-从三个外部表创建一个内部表_Hive_Hdfs_Hiveql_Hive Table - Fatal编程技术网

Hive 配置单元-从三个外部表创建一个内部表

Hive 配置单元-从三个外部表创建一个内部表,hive,hdfs,hiveql,hive-table,Hive,Hdfs,Hiveql,Hive Table,我在配置单元中有三个外部表: 表1: CREATE EXTERNAL TABLE IF NOT EXISTS table_1( unique_key_column_1 VARCHAR, column_needed_1 DATE, redundant_column_1 VARCHAR, redundant_column_2 VARCHAR, redundant_column_3 VARCHAR, column_needed_2 TIMESTAMP, redundant_column_4 VA

我在配置单元中有三个外部表:

表1:

CREATE EXTERNAL TABLE IF NOT EXISTS table_1(
unique_key_column_1 VARCHAR,
column_needed_1 DATE,   
redundant_column_1 VARCHAR,
redundant_column_2 VARCHAR,
redundant_column_3 VARCHAR,
column_needed_2 TIMESTAMP,
redundant_column_4 VARCHAR,
redundant_column_5 VARCHAR,
column_needed_3 INT,
redundant_column_6 VARCHAR,
redundant_column_7 VARCHAR)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',’
STORED AS TEXTFILE location '/user/<username>/visdata';
我该怎么做

编辑1: 下面是我能想到的,从两张桌子连接起来。我仍然不知道如何将三个表合并成一个表:

> create table combined_table;
> insert into combined_table SELECT * FROM (SELECT r.unique_key_column_1, r.column_needed_1, r.column_needed_2, r.column_needed_3, o.r.column_needed_4, o.column_needed_5, o.column_needed_6, o.column_needed_7 FROM table_1 LEFT OUTER JOIN table_2 o ON (r.unique_key_column_1 = o.unique_key_column_2 );
编辑2:
我刚刚意识到连接是昂贵的。那么,我是否可以使用分区来实现这一点呢?

@NaveenKumar这里的解决方案是为您想要的组合表编写模式。然后将3个表中的结果插入到最终的表中

INSERT INTO combinedTable [SELECT JOIN QUERY HERE]

@NaveenKumar这里的解决方案是为您想要的组合表编写模式。然后将3个表中的结果插入到最终的表中

INSERT INTO combinedTable [SELECT JOIN QUERY HERE]

您可以通过左键连接所有三个表来创建组合表。检查下面的查询

创建表和插入数据

CREATE TABLE IF NOT EXISTS COMBINED_TABLE AS 
SELECT
   UNIQUE_KEY_COLUMN_1,
   TBLA.COLUMN_NEEDED_1,
   TBLA.COLUMN_NEEDED_2,
   TBLA.COLUMN_NEEDED_3,
   TBLB.COLUMN_NEEDED_4,
   TBLB.COLUMN_NEEDED_5,
   TBLB.COLUMN_NEEDED_6,
   TBLB.COLUMN_NEEDED_7,
   TBLC.UNIQUE_KEY_COLUMN_2,
   TBLC.COLUMN_NEEDED_8,
   TBLC.COLUMN_NEEDED_9,
   TBLC.COLUMN_NEEDED_10,
FROM
   TABLE_1 TBLA 
   LEFT JOIN
      TABLE_2 TBLB 
      ON TBLA.UNIQUE_KEY_COLUMN_1 = TBLB.UNIQUE_KEY_COLUMN_1 
   LEFT JOIN
      TABLE_3 TBLC 
      ON TBLC.UNIQUE_KEY_COLUMN_2 = TBLB.UNIQUE_KEY_COLUMN_1;

如果目标表已创建,则将数据插入表中

INSERT INTO COMBINED_TABLE
SELECT
   UNIQUE_KEY_COLUMN_1,
   TBLA.COLUMN_NEEDED_1,
   TBLA.COLUMN_NEEDED_2,
   TBLA.COLUMN_NEEDED_3,
   TBLB.COLUMN_NEEDED_4,
   TBLB.COLUMN_NEEDED_5,
   TBLB.COLUMN_NEEDED_6,
   TBLB.COLUMN_NEEDED_7,
   TBLC.UNIQUE_KEY_COLUMN_2,
   TBLC.COLUMN_NEEDED_8,
   TBLC.COLUMN_NEEDED_9,
   TBLC.COLUMN_NEEDED_10,
FROM
   TABLE_1 TBLA 
   LEFT JOIN
      TABLE_2 TBLB 
      ON TBLA.UNIQUE_KEY_COLUMN_1 = TBLB.UNIQUE_KEY_COLUMN_1 
   LEFT JOIN
      TABLE_3 TBLC 
      ON TBLC.UNIQUE_KEY_COLUMN_2 = TBLB.UNIQUE_KEY_COLUMN_1;


您可以通过左键连接所有三个表来创建组合表。检查下面的查询

创建表和插入数据

CREATE TABLE IF NOT EXISTS COMBINED_TABLE AS 
SELECT
   UNIQUE_KEY_COLUMN_1,
   TBLA.COLUMN_NEEDED_1,
   TBLA.COLUMN_NEEDED_2,
   TBLA.COLUMN_NEEDED_3,
   TBLB.COLUMN_NEEDED_4,
   TBLB.COLUMN_NEEDED_5,
   TBLB.COLUMN_NEEDED_6,
   TBLB.COLUMN_NEEDED_7,
   TBLC.UNIQUE_KEY_COLUMN_2,
   TBLC.COLUMN_NEEDED_8,
   TBLC.COLUMN_NEEDED_9,
   TBLC.COLUMN_NEEDED_10,
FROM
   TABLE_1 TBLA 
   LEFT JOIN
      TABLE_2 TBLB 
      ON TBLA.UNIQUE_KEY_COLUMN_1 = TBLB.UNIQUE_KEY_COLUMN_1 
   LEFT JOIN
      TABLE_3 TBLC 
      ON TBLC.UNIQUE_KEY_COLUMN_2 = TBLB.UNIQUE_KEY_COLUMN_1;

如果目标表已创建,则将数据插入表中

INSERT INTO COMBINED_TABLE
SELECT
   UNIQUE_KEY_COLUMN_1,
   TBLA.COLUMN_NEEDED_1,
   TBLA.COLUMN_NEEDED_2,
   TBLA.COLUMN_NEEDED_3,
   TBLB.COLUMN_NEEDED_4,
   TBLB.COLUMN_NEEDED_5,
   TBLB.COLUMN_NEEDED_6,
   TBLB.COLUMN_NEEDED_7,
   TBLC.UNIQUE_KEY_COLUMN_2,
   TBLC.COLUMN_NEEDED_8,
   TBLC.COLUMN_NEEDED_9,
   TBLC.COLUMN_NEEDED_10,
FROM
   TABLE_1 TBLA 
   LEFT JOIN
      TABLE_2 TBLB 
      ON TBLA.UNIQUE_KEY_COLUMN_1 = TBLB.UNIQUE_KEY_COLUMN_1 
   LEFT JOIN
      TABLE_3 TBLC 
      ON TBLC.UNIQUE_KEY_COLUMN_2 = TBLB.UNIQUE_KEY_COLUMN_1;


>创建表组合_表;>插入组合表格SELECT*从SELECT r.unique\U key\U column\U 1、r.column\U REQUIRED\U 2、r.column\U REQUIRED\U 3、o.r.column\U REQUIRED\U 4、o.column\U REQUIRED\U 5、o.column\U REQUIRED\U 6、o.column\U REQUIRED\U 7中选择表格1左侧外部联接表格\U 2 o.unique\U key\U column\U 1=o.UNIQUIRE\U key\U 2;这就是我提出的,合并两个表的数据,但我不知道如何从三个表中生成一个表@steven dfheinzYou将需要使用原始表中的模式执行create语句,仅用于最终表中所需的列。所以你一共做了4张表。第四个通常不是外部移除外部+位置。前3个表成为暂存表,最后4个表是您真正想要的组合结果…我不太理解您。请你写一些语法示例。>创建表组合\u table;>插入组合表格SELECT*从SELECT r.unique\U key\U column\U 1、r.column\U REQUIRED\U 2、r.column\U REQUIRED\U 3、o.r.column\U REQUIRED\U 4、o.column\U REQUIRED\U 5、o.column\U REQUIRED\U 6、o.column\U REQUIRED\U 7中选择表格1左侧外部联接表格\U 2 o.unique\U key\U column\U 1=o.UNIQUIRE\U key\U 2;这就是我提出的,合并两个表的数据,但我不知道如何从三个表中生成一个表@steven dfheinzYou将需要使用原始表中的模式执行create语句,仅用于最终表中所需的列。所以你一共做了4张表。第四个通常不是外部移除外部+位置。前3个表成为暂存表,最后4个表是您真正想要的组合结果…我不太理解您。你能写一些语法示例吗?非常感谢。在我的问题中第一次编辑后不久,我就明白了这一点,并意识到连接是昂贵的。你能用分区帮我做这件事吗?非常感谢。在我的问题中第一次编辑后不久,我就明白了这一点,并意识到连接是昂贵的。你能帮我用分区做这个吗。