hadoop - Hive 的动态分区无法写入最终文件
问题描述
我正在尝试将具有 1 个分区列的表中的数据加载到具有 2 个分区列的新表中,较新的分区列是第一个表中的常规列。
例如 create table 语句(为便于理解而简化和更改):
CREATE EXTERNAL TABLE `house`(
`color` string,
`size` string,
`owner` string)
PARTITIONED BY (
`dt` date)
CREATE EXTERNAL TABLE `house_new`(
`size` string,
`owner` string)
PARTITIONED BY (
`dt` date, `color` string)
我有一个简单的插入查询,如下所示:
INSERT OVERWRITE TABLE `house_new` PARTITION (`dt`='2018-06-10’, `color`)
SELECT
`size`,
`owner`,
`color`
FROM house
WHERE `dt`='2018-06-10';
所以这一直运行并表示该工作已在终端和 Tez UI 中成功完成。即使在整个过程中,我也可以看到文件实际上填充在 S3 上的 tmp/staging 文件夹中,并具有所有正确的分区。但是,当它最终完成时,实际上没有写入任何文件,并且所有临时文件都被删除。
对分区进行硬编码(静态分区)有效,并且从 1 个分区列表到另一个 1 个分区列表的动态分区也有效。从 1 个分区的列表开始并尝试从第一个表派生第二个分区是行不通的。
解决方案
推荐阅读
- c++ - Windows / MSVC上的C ++中的浮点异常?
- python - `pyenv global xyz`和`pyenv shell xyz`有什么区别?
- javascript - svelte 可以使用可组合的函数吗?
- table-plus - 如何在 TablePlus GUI 中编辑索引
- python-3.x - Mlflow - 空的工件文件夹
- ios - 在 Swift 中,我什么时候使用“while let”?
- r - 将 NA 分配给 R 中的矩阵条目
- jquery - Vue组件中js库所需的JQUery
- css - 在 WordPress 中做了一些事情
- c++ - 这个字符反转功能有什么问题?