我有一堆大的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 文件。
为什么会这样?如何使配置单元从子文件夹读写?
1条答案
按热度按时间wa7juj8i1#
Hive缓存了我以前的表名,所以当我更新时,它仍然显示旧版本,没有更新。
一旦我改变了名称,它再次处理,一切都很好。