当前位置: 首页 > 知识库问答 >
问题:

将带有.tsv文件的HDFS目录映射到配置单元

白星渊
2023-03-14

HDFS中的数据如下所示:

/ad_data/raw/reg_logs/utc_date=2014-06-11/utc_hour=03

注意:数据每天和每小时加载到HDFS目录/ad_data/raw/reg_logs中。

此HDFS目录中有3个.tsv文件

funel1.tsv
funel2.tsv
funel3.tsv
2344    -39 223
2344    -23 443
2394    -43 98
2377    -12 33
...
...
CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING, utc_hour STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/raw/reg_logs';

我怎样才能实现呢?如果需要,请更正我的配置单元表模式和获取数据的方法。

==

第二部分:

CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs_org (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/reg_logs_org';
insert overwrite table reg_logs_org
select id, region_code, sum(count), utc_date
from 
reg_logs
group by 
utc_date, id, region_code
FAILED: SemanticException 1:23 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'reg_logs_org'
Thank you,
Rio

共有1个答案

侯令雪
2023-03-14

你们很亲密。最后一步是您需要将分区信息添加到Hive的转移体中。配置单元单独存储每个分区的位置,它不会自动查找新分区。有两种方法可以添加分区:

>

  • 每小时执行一次add partition语句:

    alter table reg_logs add partition(utc_date='2014-06-11', utc_hour='03')
    location '/ad_data/raw/reg_logs/utc_date=2014-06-11/utc_hour=03';
    

    每小时(或不那么频繁)做一次桌子修理。这将扫描根表位置中尚未添加的任何分区。

    msck repair table reg_logs;
    

    第一种方法更痛苦,但效率更高。第二种方法很简单,但每次都要对所有分区进行全面扫描。

    编辑:问题后半部分:

    您只需要添加一些语法,以便使用动态分区插入到表中。一般情况下是:

    insert overwrite [table] partition([partition column])
    select ...
    
    insert overwrite table reg_logs_org partition(utc_date)
    select id, region_code, sum(count), utc_date
    from 
    reg_logs
    group by 
    utc_date, id, region_code
    

  •  类似资料:
    • 我将Spring Boot与和依赖项。我的wiremock定义存储在json文件中。就像这样: 目录A/映射/detail-mapping-123.json: 目录a/_文件/详细信息。json: 目录B/mappings/search-mapping-123。json: 目录b/_文件/search-123。json: 我有一个标准的JUnit测试类,它带有以下注释: 这些文件看起来被wirem

    • XML 映射配置文件 MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档 的高层级结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 e

    • 15/07/01 07:32:46[main]:错误HDFS.KeyProviderCache:找不到包含密钥[DFS.Encryption.key.Provider.uri]的uri来创建密钥提供程序!!OK+-----------+------------++++ testtab1.id testtab1.org +------------+-----------------++++ 其他人s

    • 我有4张桌子: 库存(库存ID、可用数量) 一个客户可以有多个订单,而一个订单由多个orderDetails项目组成。我正在尝试将库存项目存储在由库存项目和数量整数组成的映射中。 当我尝试以这种方式持久化它时,第一个库存项目将以1的orderID添加到Order详细信息表中。但是下一个是使用2的orderID插入的(不存在)。 有什么帮助吗?

    • 埃弗里翁。我正在尝试创建一个基本表单,将姓氏和姓氏保存在一个文本文件中,因此当我必须登录时,我将从txt文件中检索它们,但显然我对txt文件的目录做了一些错误 现在我更新了代码,出现了这个安全错误 警告:fopen(/home/sbau01/public_www/php/fma/data/data.txt):无法打开流:在/home/sbau01/public_www/php/fma/form中的

    • 我有一个目录,它是在执行应用程序后创建的。在使用应用程序的过程中,它充满了一些图片,这些图片是ComboBox的ItemsSource。在关闭应用程序之前,我试图通过设置new()或NULL来清除ItemsSource并删除该目录。如果目录为空,则会正常删除。但除此之外——什么都没有发生,也没有例外。我做错了什么? 创建目录并将路径值分配给“FeedBackScreenshotsPath” 删除