如何使用新列作为文件名和文件夹名将数据从文件夹导入到 Hive?
How to import data from folder to Hive with new columns as file's name and folder's name?
我有这样的数据输入:
- 司机
- driver_1
- 1.csv
- 2.csv
- ...
- driver_2
- 1.csv
- 2.csv
- ...
- ...
csv 文件的结构是:
x,y
0.0,0.0
18.6,-11.1
36.1,-21.9
53.7,-32.6
70.1,-42.8
86.5,-52.6
我想将此文件夹中的所有文件加载到 Hive table,例如:
id, x, y, file_name, folder_name
1, 0.0, 0.0, 1.csv, driver_1
...
我该怎么做?
谁能帮帮我?
Hive 有一个名为 INPUT__FILE__NAME
的 virtual column,它包含包含记录的输入文件的完整路径。然后使用 REGEXP_EXTRACT
我们可以提取出父目录和文件名:
SELECT
x
, y
, REGEXP_EXTRACT(INPUT__FILE__NAME, '.*/(.*)/(.*)', 2) AS file_name
, REGEXP_EXTRACT(INPUT__FILE__NAME, '.*/(.*)/(.*)', 1) AS folder_name
FROM
table
;
我有这样的数据输入:
- 司机
- driver_1
- 1.csv
- 2.csv
- ...
- driver_2
- 1.csv
- 2.csv
- ...
- ...
- driver_1
csv 文件的结构是:
x,y
0.0,0.0
18.6,-11.1
36.1,-21.9
53.7,-32.6
70.1,-42.8
86.5,-52.6
我想将此文件夹中的所有文件加载到 Hive table,例如:
id, x, y, file_name, folder_name
1, 0.0, 0.0, 1.csv, driver_1
...
我该怎么做? 谁能帮帮我?
Hive 有一个名为 INPUT__FILE__NAME
的 virtual column,它包含包含记录的输入文件的完整路径。然后使用 REGEXP_EXTRACT
我们可以提取出父目录和文件名:
SELECT
x
, y
, REGEXP_EXTRACT(INPUT__FILE__NAME, '.*/(.*)/(.*)', 2) AS file_name
, REGEXP_EXTRACT(INPUT__FILE__NAME, '.*/(.*)/(.*)', 1) AS folder_name
FROM
table
;