Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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_Partition - Fatal编程技术网

Hive 蜂巢管道的设计

Hive 蜂巢管道的设计,hive,hdfs,partition,Hive,Hdfs,Partition,我试图找到在Hive和HDFS中实现以下管道的最佳方法: 我想接收一个csv(到目前为止没有问题),但是,我希望分区是从csv文件中通知的字段生成的 我创建了一个外部表,将文件存放在HDFS上,并定义了partition字段,但是通过一个简单的put(这是有意义的),没有创建分区,并且在尝试删除msck修复表时,我得到了一个退出代码1 我想知道,以下做法是否可行: 将CSV文件加载到内部配置单元表中,并作为临时表加载 使用分区插入到“正式”表中 这是一种有效的方法吗?如果是这样,我还没有找到很多

我试图找到在Hive和HDFS中实现以下管道的最佳方法:

我想接收一个csv(到目前为止没有问题),但是,我希望分区是从csv文件中通知的字段生成的

我创建了一个外部表,将文件存放在HDFS上,并定义了partition字段,但是通过一个简单的put(这是有意义的),没有创建分区,并且在尝试删除msck修复表时,我得到了一个退出代码1

我想知道,以下做法是否可行:

  • 将CSV文件加载到内部配置单元表中,并作为临时表加载

  • 使用分区插入到“正式”表中

  • 这是一种有效的方法吗?如果是这样,我还没有找到很多关于如何做第一个的信息


    谢谢。

    如果每个文件只有一个分区,那么您可以使用

    hive> LOAD DATA LOCAL INPATH 'yourpath/yourfile.csv' OVERWRITE INTO TABLE your_table PARTITION (key='value');
    
    最糟糕的情况是,如果每个文件有多个分区,则需要首先将其加载到中间表中,然后使用insert OVERRIDE select重新分区数据:

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    insert overwrite official_table partition(partition_key) 
     select col1, col2, partition_col --partition is the last one
    from intermediate table... 
    
    您需要一次加载(覆盖)所有整个分区数据,如果不可能,则选择“应将目标分区中已存在的数据与增量加载合并”

    看看这个关于如何做的答案


    另外,
    INSERT(notoverwrite)INTO table(partition)select…
    是插入增量数据的可能解决方案。此语句应将数据加载到分区文件夹中的其他文件中,现有数据将保持原样。

    将CSV文件加载到“正式”表partitionHi@leftjoin谢谢,正在努力解决如何执行此操作。我猜你的意思是使用Load Data语句?是的。您的文件是在单个文件中包含单个分区还是在单个文件中包含多个分区?@leftjoin每个文件应该只有一个分区,但有时可能不止一个分区。感谢您为我指明了正确的方向,我仍在计划如何做每件事:将文件加载到临时目录中,然后将数据加载到“正式表”中。我猜,如果每个文件只有一个分区,那么直接冷加载到目标表分区中。最糟糕的情况是,如果每个文件有多个分区,则需要首先将其加载到中间表中,然后使用insert OVERRIDE-select from MEDIATE table。您需要一次加载(覆盖)所有整个分区数据,如果不可能,则选择应合并目标表中已存在的数据和增量加载,