Apache Arrow DataFusion 数据源使用指南

Apache Arrow DataFusion 数据源使用指南

arrow-datafusion Apache Arrow DataFusion SQL Query Engine arrow-datafusion 项目地址: https://gitcode.com/gh_mirrors/arr/arrow-datafusion

概述

Apache Arrow DataFusion 是一个高性能的查询引擎,支持多种数据源格式和存储系统。本文将详细介绍如何在 DataFusion CLI 中使用本地文件、远程文件以及各种云存储服务作为数据源。

本地文件查询

DataFusion 可以直接查询本地文件系统中的文件,支持 CSV、Parquet、Avro、JSON 等多种格式。

单文件查询

  1. 首先创建一个示例 CSV 文件:
echo "a,b" > data.csv
echo "1,2" >> data.csv
  1. 在 DataFusion CLI 中查询该文件:
> select * from 'data.csv';
+---+---+
| a | b |
+---+---+
| 1 | 2 |
+---+---+

目录查询

DataFusion 可以查询整个目录下的文件,前提是这些文件具有兼容的 schema:

# 假设目录结构如下
ls data_dir/
data.csv   data2.csv
> select * from 'data_dir';
+---+---+
| a | b |
+---+---+
| 3 | 4 |
| 1 | 2 |
+---+---+

远程文件查询

DataFusion 支持直接查询远程存储的文件,无需预先注册为表。

HTTP(S) 文件

select count(*) from 'https://example.com/data/hits_1.parquet'
+----------+
| COUNT(*) |
+----------+
| 1000000  |
+----------+

云存储服务

AWS S3
select count(*) from 's3://my-data-bucket/athena_partitioned/hits.parquet'

需要设置环境变量:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION
Google Cloud Storage (GCS)
select count(*) from 'gs://bucket/path/file.parquet'

需要设置环境变量:

  • GOOGLE_SERVICE_ACCOUNT

创建外部表

除了直接查询文件,还可以创建持久化的外部表。

基本语法

CREATE EXTERNAL TABLE table_name
STORED AS FORMAT
LOCATION 'path_or_url'
[OPTIONS (key 'value')]

示例

  1. 本地 Parquet 文件:
CREATE EXTERNAL TABLE hits
STORED AS PARQUET
LOCATION 'hits.parquet';
  1. 远程 HTTP 文件:
CREATE EXTERNAL TABLE hits
STORED AS PARQUET
LOCATION 'https://example.com/data/hits_1.parquet';

数据格式支持

Parquet 格式

Parquet 文件的 schema 会自动推断。

-- 单文件
CREATE EXTERNAL TABLE taxi
STORED AS PARQUET
LOCATION '/mnt/nyctaxi/tripdata.parquet';

-- 目录
CREATE EXTERNAL TABLE taxi
STORED AS PARQUET
LOCATION '/mnt/nyctaxi/';

-- 通配符
CREATE EXTERNAL TABLE taxi
STORED AS PARQUET
LOCATION '/mnt/nyctaxi/*.parquet';

CSV 格式

CSV 文件支持自动推断 schema 或显式定义 schema。

-- 自动推断(带表头)
CREATE EXTERNAL TABLE test
STORED AS CSV
LOCATION '/path/to/file.csv'
OPTIONS ('has_header' 'true');

-- 显式定义 schema
CREATE EXTERNAL TABLE test (
    c1 VARCHAR NOT NULL,
    c2 INT NOT NULL
)
STORED AS CSV
LOCATION '/path/to/file.csv';

云存储配置

AWS S3 详细配置

CREATE EXTERNAL TABLE test
STORED AS PARQUET
OPTIONS(
    'aws.access_key_id' '******',
    'aws.secret_access_key' '******',
    'aws.region' 'us-east-2'
)
LOCATION 's3://bucket/path/file.parquet';

阿里云 OSS

CREATE EXTERNAL TABLE test
STORED AS PARQUET
OPTIONS(
    'aws.access_key_id' '******',
    'aws.secret_access_key' '******',
    'aws.oss.endpoint' 'https://bucket.oss-cn-hangzhou.aliyuncs.com'
)
LOCATION 'oss://bucket/path/file.parquet';

腾讯云 COS

CREATE EXTERNAL TABLE test
STORED AS PARQUET
OPTIONS(
    'aws.access_key_id' '******',
    'aws.secret_access_key' '******',
    'aws.cos.endpoint' 'https://cos.ap-singapore.myqcloud.com'
)
LOCATION 'cos://bucket/path/file.parquet';

最佳实践

  1. 性能考虑:对于大型数据集,优先使用 Parquet 格式而非 CSV
  2. 安全建议:避免在 SQL 中硬编码凭证,使用环境变量更安全
  3. schema 管理:对于生产环境,建议显式定义 schema 而非依赖自动推断
  4. 错误处理:查询远程文件时添加适当的超时和重试机制

通过本文介绍的各种方法,您可以灵活地在 DataFusion 中使用各种数据源,从本地文件到云存储服务,满足不同的数据处理需求。

arrow-datafusion Apache Arrow DataFusion SQL Query Engine arrow-datafusion 项目地址: https://gitcode.com/gh_mirrors/arr/arrow-datafusion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙典将Phyllis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值