从 AWS S3 导入
StarRocks 支持通过以下方式从 AWS S3 导入数据:
- 使用 INSERT+
FILES()
进行同步导入。 - 使用 Broker Load 进行异步导入。
- 使用 Pipe 进行持续的异步导入。
三种导入方式各有优势,具体将在下面分章节详细阐 述。
一般情况下,建议您使用 INSERT+FILES()
,更为方便易用。
但是,INSERT+FILES()
当前只支持 Parquet、ORC 和 CSV 文件格式。因此,如果您需要导入其他格式(如 JSON)的数据、或者需要在导入过程中执行 DELETE 等数据变更操作,可以使用 Broker Load。
如果需要导入超大数据(比如超过 100 GB、特别是 1 TB 以上的数据量),建议您使用 Pipe。Pipe 会按文件数量或大小,自动对目录下的文件进行拆分,将一个大的导入作业拆分成多个较小的串行的导入任务,从而降低出错重试的代价。另外,在进行持续性的数据导入时,也推荐使用 Pipe,它能监听远端存储目录的文件变化,并持续导入有变化的文件数据。
准备工作
准备数据源
确保待导入数据已保存在 S3 存储桶。建议您将数据保存在与 StarRocks 集群同处一个地域(Region)的 S3 存储桶,这样可以降低数据传输成本。
本文中,我们提供了样例数据集 s3://starrocks-examples/user-behavior-10-million-rows.parquet
,对所有合法的 AWS 用户开放。您只要配置真实有效的安全凭证,即可访问该数据集。
查看权限
导入操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权。
获取资源访问配置
本文的示例均使用基于 IAM User 的认证方式。为确保您能够顺利访问存储在 AWS S3 中的数据,建议您根据“基于 IAM User 认证鉴权中介绍的准备工作,创建 IAM User、并配置 IAM 策略。
概括来说,如果选择使用基于 IAM User 的认证方式,您需要提前获取以下 AWS 资源信息:
- 数据所在的S3 存储桶
- S3 对象键(或“对象名称”)(只在访问 S3 存储桶中某个特定数据对象时才需要。注意,如果要访问的数据对象保存在子文件夹下,其名称可以包含前缀。)
- S3 存储桶所在的 AWS 地域(Region)
- 作为访问凭证的 Access Key 和 Secret Key
有关 StarRocks 支持的其他认证方式,参见配置 AWS 认证信息。
通过 INSERT+FILES() 导入
该特性从 3.1 版本起支持。当前只支持 Parquet、ORC 和 CSV(自 v3.3.0 起)文件格式。
INSERT+FILES() 优势
FILES()
会根据给定的数据路径等参数读取数据,并自动根据数据文件的格式、列信息等推断出表结构,最终以数据行的形式返回文件中的数据。
通过 FILES()
,您可以:
- 使用 SELECT 语句直接从 AWS S3 查询数据。
- 通过 CREATE TABLE AS SELECT(简称 CTAS)语句实现自动建表和导入数据。
- 手动建表,然后通过 INSERT 导入数据。
操作示例
通过 SELECT 直接查询数据
您可以通过 SELECT+FILES()
直接查询 AWS S3 里的数据,从而在建表前对待导入数据有一个整体的了解,其优势包括:
- 您不需要存储数据就可以对其进行查看。
- 您可以查看数据的最大值、最小值,并确定需要使用哪些数据类型。
- 您可以检查数据中是否包含
NULL
值。
例如,查询样例数据集 s3://starrocks-examples/user-behavior-10-million-rows.parquet
中的数据:
SELECT * FROM FILES
(
"path" = "s3://starrocks-examples/user-behavior-10-million-rows.parquet",
"format" = "parquet",
"aws.s3.region" = "us-east-1",
"aws.s3.access_key" = "AAAAAAAAAAAAAAAAAAAA",
"aws.s3.secret_key" = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
)
LIMIT 3;
说明
把上面命令示例中的
AAA
和BBB
替换成真实有效的 Access Key 和 Secret Key 作为访问凭证。由于这里使用的数据对象对所有合法的 AWS 用户开放,因此您填入任何真实有效的 Access Key 和 Secret Key 都可以。
系统返回如下查询结果:
+--------+---------+------------+--------------+---------------------+
| UserID | ItemID | CategoryID | BehaviorType | Timestamp |
+--------+---------+------------+--------------+---------------------+
| 543711 | 829192 | 2355072 | pv | 2017-11-27 08:22:37 |
| 543711 | 2056618 | 3645362 | pv | 2017-11-27 10:16:46 |
| 543711 | 1165492 | 3645362 | pv | 2017-11-27 10:17:00 |
+--------+---------+------------+--------------+---------------------