Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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_Hadoop2 - Fatal编程技术网

Hive 在同一个查询中可以同时使用静态分区和动态分区吗?如果是,那么文件夹将如何创建。?

Hive 在同一个查询中可以同时使用静态分区和动态分区吗?如果是,那么文件夹将如何创建。?,hive,hadoop2,Hive,Hadoop2,我们可以在同一个查询中添加静态和动态分区吗。如果是,将如何根据以下数据创建文件夹 我们有不同国家及其州的数据 我们对country=“US”进行静态分区,对state进行动态分区 如何在HDFS中创建文件夹结构 是的。文件夹结构将根据在表定义中使用的顺序分层创建。例如,如果使用以下内容定义表: CREATE TABLE your_table ( column1 INT, column2 STRING ... columnN FLOAT ) PARTITIONED BY

我们可以在同一个查询中添加静态和动态分区吗。如果是,将如何根据以下数据创建文件夹

  • 我们有不同国家及其州的数据
  • 我们对country=“US”进行静态分区,对state进行动态分区

  • 如何在HDFS中创建文件夹结构

    是的。文件夹结构将根据在表定义中使用的顺序分层创建。例如,如果使用以下内容定义表:

    CREATE TABLE your_table (
       column1 INT, 
       column2 STRING
       ...
       columnN FLOAT
    )
    PARTITIONED BY (country STRING, state STRING);
    
    .../your_table/country=US/state=CA
    ...
    .../your_table/country=US/state=NY
    
    您可以为国家定义静态值,为州定义动态值。在这种情况下,您提前指定静态分区(“US”)的值,并让Hive读取列“state”(在
    SELECT
    query的每一行上)的值,并为每个状态动态创建文件夹(唯一的HDFS路径)

    INSERT OVERWRITE TABLE your_partitioned_table
    PARTITION (country = 'US', state)
    SELECT T.column1, T.column2, ..., T.country, T.state
    FROM your_table T
    WHERE T.country = 'US';
    
    您的HDFS文件夹结构如下所示:

    CREATE TABLE your_table (
       column1 INT, 
       column2 STRING
       ...
       columnN FLOAT
    )
    PARTITIONED BY (country STRING, state STRING);
    
    .../your_table/country=US/state=CA
    ...
    .../your_table/country=US/state=NY
    

    关于如何在配置单元中使用动态和静态分区,您有一个很好的指南。

    继续上面的问题和答案。对于非美国国家/地区数据,将如何创建文件夹结构?假设在静态分区中,我们只指定country=US;在这种情况下,由于您正在设置值“US”,因此不会为非美国国家/地区创建文件夹,因为您在WHERE子句中仅从我们这里选择数据。如果您需要来自所有国家/地区的数据,您还必须为国家/地区使用动态分区(即,不设置国家/地区值)嗨,因为我们已经提到国家/地区是静态分区,所以在select/文件中是否需要国家/地区列值?你能告诉我吗