通过Spark SQL读写C-Store表数据

更新时间: 2023-09-27 10:52:33

AnalyticDB MySQL湖仓版(3.0)支持通过Spark SQL读写C-Store表数据,本文主要介绍如何通过Spark SQL读写C-Store表数据。

前提条件

注意事项

  • 不支持通过Spark SQL更新和删除C-Store表数据。

  • 写入或查询热数据时,需先修改相关配置项再执行SQL语句,否则会导致SQL执行失败。配置项如下:

    SET adb_config CSTORE_HOT_TABLE_ALLOW_SINGLE_REPLICA_BUILD=true;
    SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
    SET adb_config ELASTIC_PRODUCT_ENABLE_MIXED_STORAGE_POLICY=true;
    重要

    修改配置项后需手动触发BUILD任务,详情请参见BUILD

步骤一:进入数据开发

  1. 登录云原生数据仓库AnalyticDB MySQL控制台
  2. 在页面左上角,选择集群所在地域。
  3. 在左侧导航栏,单击集群列表
  4. 湖仓版(3.0)页签下,单击目标集群ID
  5. 在左侧导航栏,单击作业开发 > SQL开发
  6. SQLConsole窗口,选择Job型资源组和Spark引擎。

步骤二:创建库和C-Store表

说明

您可以选择批处理或交互式执行任意一种方式执行以下SQL语句。详情请参见Spark SQL执行方式

  1. 执行以下语句,创建数据库。

    CREATE DATABASE spark_create_adb_db_test;
  2. 执行以下语句,创建C-Store表。Spark SQL建表语法详情请参见Spark SQL创建C-Store表

    CREATE TABLE spark_create_adb_db_test.test_adb_tbl (
      id int,
      name string COMMENT 'test_name',
      age int
    ) using adb TBLPROPERTIES('primaryKey'='id,age',
                    'distributeType'='HASH', 
                    'distributeColumns'='id', 
                    'partitionType'='value', 
                    'partitionColumn'='age',   
                    'partitionCount'='120'     
                   );

步骤三:写入C-Store表数据

说明

您可以选择批处理或交互式执行任意一种方式执行以下SQL语句。详情请参见Spark SQL执行方式

AnalyticDB MySQL仅支持通过INSERT OVERWRITE语句向C-Store表中写入数据。您可以选择以下任意一种方式向C-Store表写入数据:

  • 方式一:INSERT OVERWRITE静态分区写入

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) values(1, 'bom');
  • 方式二:INSERT OVERWRITE动态分区写入

    INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) values (1, 'bom', 10);

步骤四:查询C-Store表数据

说明
  • 您可以选择批处理或交互式执行任意一种方式执行以下SQL语句。详情请参见Spark SQL执行方式

  • 执行Spark SQL语句,只返回执行成功或者失败,不返回数据。您可以在Spark Jar开发页面应用列表页签中的日志查看表数据。详情请参见查看Spark应用信息

执行以下语句,查询C-Store表数据。

SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Spark配置项

通过Spark SQL读写C-Store表时,支持配置如下配置项:

配置项

说明

默认值

spark.adb.write.batchSize

单批次写入数据的条数。取值范围为大于0的正整数。

600

spark.adb.write.arrow.maxMemoryBufferSize

写入最大内存缓冲大小。取值范围为大于0的正整数,单位为MB。

1024 MB

spark.adb.write.arrow.maxRecordSizePerBatch

单批次写入数据的最大记录条数。取值范围为大于0的正整数。

500

spark.adb.createSnapshot

INSERT OVERWRITE语句写入数据后是否创建快照。取值:

  • true:是。

  • false(默认值):否。

false

spark.adb.readDataVersion

读取数据的版本。取值为:

  • CURRENT:当前最新的数据。

  • LATEST_BUILD:最新构建的全量数据。

  • LATEST_SNAPSHOT:最新的快照数据。

LATEST_BUILD

阿里云首页 云原生数据仓库AnalyticDB MySQL版 相关技术圈