我有一大组 CSV 文件需要合并(如
UNION ALL
中所示),但首先我只想读取其中的一小部分。
我有一组 CSV 文件路径,我想使用 DuckDB 的
read_csv
来读取它们。
具体来说,我有一个表
table_csv_paths
和列 csv_file_path VARCHAR
。你可能认为我可以read_csv(csv_file_path)
。以下所有尝试都失败了:
SELECT
*
FROM table_csv_paths AS csv_file,
LATERAL read_csv(csv_file.csv_file_path, union_by_name = true, AUTO_DETECT=TRUE) AS t_csv
;
-- Error: IO Error: No files found that match the pattern "csv_file.csv_file_path"
SELECT
*
FROM table_csv_paths AS csv_file, LATERAL (
SELECT * FROM read_csv(csv_file.csv_file_path, union_by_name = true, AUTO_DETECT=TRUE)
) AS t_csv
;
-- Error: IO Error: No files found that match the pattern "csv_file.csv_file_path"
WITH files_agg AS (
SELECT list(csv_file.csv_file_path) AS csv_file_paths
FROM table_csv_paths AS csv_file
)
SELECT * FROM files_agg, read_csv(csv_file_paths, union_by_name = true, AUTO_DETECT=TRUE);
-- Error: IO Error: No files found that match the pattern "csv_file_paths"
有没有办法实现这个目标?这似乎是一个很自然的用例,因为数据管道经常发展变得更加动态。
目前,不,这是不可能的,可以通过在 SQL 之外执行部分逻辑来解决此限制。
功能请求位于 https://github.com/duckdb/duckdb/issues 跟踪这一点会很方便。
Carlo,致力于 DuckDB。