从 Microsoft Azure Storage 导入
StarRocks 支持通过以下方式从 Azure 导入数据:
- 使用 INSERT+
FILES()进行同步导入。 - 使用 Broker Load 进行异步导入。
两种导入方式各有优势,具体将在下面分章节详细阐述。
一般情况下,建议您使用 INSERT+FILES(),更为方便易用。
但是,INSERT+FILES() 当前只支持 Parquet、ORC 和 CSV 文件格式。因此,如果您需要导入其他格式(如 JSON)的数据、或者需要在导入过程中执行 DELETE 等数据变更操作,可以使用 Broker Load。
准备工作
准备数据源
确保待导入数据已保存在您 Azure 服务账号(Service Account)下的容器(Container)。
本文中,我们提供了 Parquet 格式的样例数据集 user_behavior_ten_million_rows.parquet,保存在 Azure Data Lake Storage Gen2(简称 ADLS Gen2)服务账号 (starrocks) 下容器 (starrocks-container) 的根目录里。
查看权限
导入操作需要目标表的 INSERT 权限。如果您的用户账号没有 INSERT 权限,请参考 GRANT 给用户赋权,语法为 GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}。
获取资源访问配置
本文的示例使用基于 Shared Key 的认证方式。为确保您能顺利访问存储在 ADLS Gen2 中的数据,建议您参照“Azure Data Lake Storage Gen2 > Shared Key (access key of storage account) 中的介绍,理解该认证方式下需要配置哪些认证参数。
概括来说,如果选择基于 Shared Key 的认证方式,您需要提前获取以下资源信息:
- ADLS Gen2 存储账号的用户名
- ADLS Gen2 账号的 Shared Key(即 Access Key)
有关 StarRocks 支持的其他认证方式,参见 Authenticate to Azure cloud storage。
通过 INSERT+FILES() 导入
该特性从 3.2 版本起支持。当前只支持 Parquet、ORC 和 CSV(自 v3.3.0 起)文件格式。
INSERT+FILES() 优势
FILES() 会根据给定的数据路径等参数读取数据,并自动根据数据文件的格式、列信息等推断出表结构,最终以数据行的形式返回文件中的数据。
通过 FILES(),您可以:
- 使用 SELECT 语句直接从 Azure 查询数据。
- 通过 CREATE TABLE AS SELECT(简称 CTAS)语句实现自动建表和导入数据。
- 手动建表,然后通过 INSERT 导入数据。
操作示例
通过 SELECT 直接查询数据
您可以通过 SELECT+FILES() 直接查询 Azure 里的数据,从而在建表前对待导入数据有一个整体的了解,其优势包括:
- 您不需要存储数据就可以对其进行查看。
- 您可以查看数据的最大值、最小值,并确定需要使用哪些数据类型。
- 您可以检查数据中是否包含
NULL值。
例如,查询样例数据集 user_behavior_ten_million_rows.parquet 中的数据:
SELECT * FROM FILES
(
"path" = "abfss://starrocks-container@starrocks.dfs.core.windows.net/user_behavior_ten_million_rows.parquet",
"format" = "parquet",
"azure.adls2.storage_account" = "starrocks",
"azure.adls2.shared_key" = "xxxxxxxxxxxxxxxxxx"
)
LIMIT 3;
系统返回如下类似查询结果:
+--------+---------+------------+--------------+---------------------+
| 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 |
+--------+---------+------------+--------------+---------------------+
说明
以上返回结果中的列名是源 Parquet 文件中定义的列名。
通过 CTAS 自动建表并导入数据
该示例是上一个示例的延续。该示例中,通过在 CREATE TABLE AS SELECT (CTAS) 语句中嵌套上一个示例中的 SELECT 查询,StarRocks 可以自动推断表结构、创建表、并把数据导入新建的表中。Parquet 格式的文件自带列名和数据类型,因此您不需要指定列名或数据类型。
说明
使用表结构推断功能时,CREATE TABLE 语句不支持设置副本数。如果您的集群为存算一体模式,您需要在建表前把副本数设置好。例如,您可以通过如下命令设置副本数为
3:ADMIN SET FRONTEND CONFIG ('default_replication_num' = "3");
通过如下语句创建数据库、并切换至该数据库:
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;