hive 谷歌云存储中的配置单元外部表位置忽略子目录

kb5ga3dv  于 2023-02-19  发布在  Hive
关注(0)|答案(1)|浏览(102)

我有一堆大的csv.gz文件在谷歌云存储,我们从外部来源。我们需要把这个在BigQuery中,这样我们就可以开始查询,但BigQuery不能直接摄取CSV GZIPPED文件大于4GB。所以,我决定把这些文件转换成Parquet格式,然后在BigQuery中加载。
让我们以websites.csv.gz文件为例,该文件位于路径gs://<BUCKET-NAME>/websites/websites.csv.gz下。
现在,我写了一个Hive脚本如下-

CREATE EXTERNAL TABLE websites (
    col1 string,
    col2 string,
    col3 string,
    col4 string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'gs://<BUCKET-NAME>/websites/'
TBLPROPERTIES ('skip.header.line.count'='1');

msck repair TABLE websites;

CREATE EXTERNAL TABLE par_websites (
    col1 string,
    col2 string,
    col3 string,
    col4 string
) STORED AS PARQUET LOCATION 'gs://<BUCKET-NAME>/websites/par_websites/';

INSERT OVERWRITE TABLE par_websites
SELECT *
FROM websites;

这工作得很好,并创建一个新的文件夹par_websites,如在指定的位置gs://<BUCKET-NAME>/websites/par_websites/,其中有一个 parquet 文件在它里面。
但是,当website.csv.gz文件在一个子文件夹中,例如gs://<BUCKET-NAME>/data/websites/,我更新脚本,以具有读取和写入位置为gs://<BUCKET-NAME>/data/websites/gs://<BUCKET-NAME>/data/websites/par_websites,它根本不工作。配置单元似乎不从gs://<BUCKET-NAME>/data/websites/websites.csv.gz读取,而不是在gs://<BUCKET-NAME>/data/websites内创建par_websites文件夹,它创建一个新文件夹gs://<BUCKET-NAME>/websites/par_websites,其中没有 parquet 文件。
为什么会这样?如何使配置单元从子文件夹读写?

wa7juj8i

wa7juj8i1#

Hive缓存了我以前的表名,所以当我更新时,它仍然显示旧版本,没有更新。
一旦我改变了名称,它再次处理,一切都很好。

相关问题