全部产品
Search
文档中心

AnalyticDB:Gunakan Spark SQL untuk membaca data dari atau menulis data ke tabel C-Store

更新时间:Nov 10, 2025

AnalyticDB for MySQL memungkinkan Anda menggunakan Spark SQL untuk membaca dan menulis data ke tabel C-Store (tabel yang menggunakan mesin tabel XUANWU) dalam mode real-time atau batch. Topik ini menjelaskan cara melakukan operasi tersebut.

Prasyarat

  • Kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse telah dibuat.

    Catatan
    • Jumlah sumber daya penyimpanan yang dipesan untuk kluster Edisi Data Lakehouse harus lebih besar dari 0 ACU.

    • Jumlah sumber daya yang dipesan untuk kluster Edisi Perusahaan harus lebih besar dari 0 ACU.

    • Jumlah sumber daya yang dipesan untuk kluster Edisi Dasar harus lebih besar dari 0 ACU.

  • Kelompok sumber daya pekerjaan telah dibuat untuk kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.

  • Akun database telah dibuat untuk kluster AnalyticDB for MySQL Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.

Langkah 1: Buka pengembangan data

  1. Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi sebelah kiri, klik Clusters. Temukan kluster yang ingin Anda kelola, lalu klik ID kluster tersebut.

  2. Di panel navigasi sebelah kiri, pilih Job Development > SQL Development.

  3. Pada tab SQLConsole, pilih mesin Spark dan kelompok sumber daya pekerjaan.

Langkah 2: Buat database dan tabel C-Store

Catatan

Anda dapat mengeksekusi pernyataan SQL berikut dalam mode batch atau interaktif. Untuk informasi selengkapnya, lihat Mode eksekusi Spark SQL.

  1. Eksekusi pernyataan berikut untuk membuat database.

    CREATE DATABASE spark_create_adb_db_test;
  2. Eksekusi pernyataan berikut untuk membuat tabel C-Store. Untuk informasi selengkapnya tentang sintaks Spark SQL untuk membuat tabel, lihat Gunakan Spark SQL untuk membuat tabel internal.

    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',
                    'storagePolicy'='COLD'   
                   );

Langkah 3: Membaca data dari dan menulis data ke tabel C-Store

Catatan
  • Anda dapat mengeksekusi pernyataan SQL berikut dalam mode batch atau interaktif. Untuk informasi selengkapnya, lihat Mode eksekusi Spark SQL.

  • Saat mengeksekusi pernyataan Spark SQL, sistem akan mengembalikan pesan yang menunjukkan keberhasilan atau kegagalan eksekusi, tetapi tidak mengembalikan data. Untuk melihat data, buka halaman Spark JAR Development, lalu klik Logs di kolom Actions yang sesuai dengan aplikasi Anda pada tab Applications. Untuk informasi selengkapnya, lihat bagian "Lihat informasi tentang aplikasi Spark" dalam topik editor Spark.

Saat membaca dan menulis data ke tabel dalam mode batch (INSERT OVERWRITE), Anda hanya perlu memilih mesin Spark dan kelompok sumber daya pekerjaan—tidak diperlukan parameter tambahan. Namun, saat menggunakan mode real-time (INSERT INTO), Anda harus menggunakan perintah SET untuk menentukan kelompok sumber daya interaktif guna mengeksekusi pernyataan SQL.

Membaca dan menulis data dalam mode batch (INSERT OVERWRITE)

Catatan penggunaan

Perhatikan hal-hal berikut saat membaca dan menulis data ke tabel dalam mode batch:

  • Anda hanya dapat menggunakan Spark SQL untuk membaca dan menulis data ke tabel C-Store partisi melalui pernyataan SELECT dan INSERT. Tabel non-partisi tidak didukung. Untuk informasi tentang cara membuat tabel partisi, lihat CREATE TABLE.

  • Anda tidak dapat menggunakan Spark SQL untuk memperbarui (UPDATE) atau menghapus (DELETE) data di tabel C-Store, baik partisi maupun non-partisi.

  • Saat mengkueri data panas, Anda harus terlebih dahulu memodifikasi item konfigurasi ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA, lalu memicu tugas BUILD secara manual. Pernyataan kueri SQL hanya dapat dieksekusi setelah tugas BUILD selesai; jika tidak, pernyataan tersebut akan gagal.

    1. Gunakan mesin XIHE untuk mengeksekusi pernyataan SQL berikut guna memodifikasi item konfigurasi.

      SET adb_config ELASTIC_ENABLE_HOT_PARTITION_HAS_HDD_REPLICA=true;
    2. Picu tugas BUILD secara manual.

      • Eksekusi pernyataan BUILD pada partisi tertentu:

        Penting

        Anda hanya dapat mengeksekusi pernyataan BUILD pada partisi tertentu untuk kluster versi V3.1.6.0 atau yang lebih baru.

        Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL, lalu buka bagian Configuration Information pada halaman Cluster Information.

        BUILD TABLE <table_name> force partitions='partition1,partition2';
      • Jalankan pernyataan BUILD pada semua tabel:

        Penting

        Fitur ini dinonaktifkan secara default. Jika Anda memaksa mengeksekusi pernyataan BUILD pada seluruh tabel, sistem akan membuat ulang indeks untuk semua data di semua partisi tabel tersebut—proses ini memakan waktu lama. Kami menyarankan agar Anda hanya mengeksekusi pernyataan BUILD pada partisi tertentu. Jika tetap ingin menggunakan fitur ini, evaluasi risiko sistem terlebih dahulu, lalu ajukan tiket untuk mengaktifkannya.

        BUILD TABLE <table_name> force = true;
    3. Setelah tugas BUILD dipicu, eksekusi pernyataan berikut untuk melihat status tugas BUILD:

      SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;
  1. Menulis data ke tabel C-Store.

    AnalyticDB for MySQL memungkinkan Anda menggunakan pernyataan INSERT OVERWRITE untuk menulis data ke tabel C-Store dalam mode batch. Anda dapat menggunakan salah satu metode berikut:

    • Metode 1: Eksekusi pernyataan INSERT OVERWRITE untuk menulis data ke partisi statis

      INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition(age=10) VALUES (1, 'bom');
    • Metode 2: Eksekusi pernyataan INSERT OVERWRITE untuk menulis data ke partisi dinamis

      INSERT OVERWRITE spark_create_adb_db_test.test_adb_tbl partition (age) VALUES (1, 'bom', 10);
  2. Membaca data dari tabel C-Store.

    SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Membaca dan menulis data dalam mode real-time (INSERT INTO)

AnalyticDB for MySQL memungkinkan Anda menggunakan pernyataan INSERT INTO untuk menulis data ke tabel C-Store dalam mode real-time. Anda dapat membaca dan menulis data ke tabel menggunakan metode JDBC atau metode View.

Metode JDBC

-- Akun database, kata sandi, dan titik akhir internal kluster.
conf spark.adb.username=user;
conf spark.adb.password=password;
conf spark.adb.endpoint=amv-bp1a74zh****.ads.aliyuncs.com:3306;
-- Aktifkan akses berbasis ENI.
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=vsw-bp12ldm83z4zu9k4d****;
SET spark.adb.eni.securityGroupId=sg-bp1cdm3acizrgq6x****;
-- Gunakan mode JDBC.
SET spark.adb.useJdbc = true;
-- Tetapkan kelompok sumber daya online untuk mengeksekusi pernyataan SQL.
SET spark.adb.resourceGroup=user_default;
-- Menulis data.
INSERT INTO spark_create_adb_db_test.test_adb_tbl VALUES (1, 'adb', 20);
-- Membaca data.
SELECT * FROM spark_create_adb_db_test.test_adb_tbl;

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

spark.adb.username

Akun database kluster.

spark.adb.password

Kata sandi akun database.

spark.adb.endpoint

Titik akhir internal dan port kluster. Formatnya adalah amv-bp1a74zh****.ads.aliyuncs.com:3306.

spark.adb.eni.enabled

Mengaktifkan akses berbasis ENI.

Saat mengakses data, Anda harus mengatur parameter spark.adb.eni.enabled ke true.

spark.adb.eni.vswitchId

ID vSwitch tempat kluster berada.

spark.adb.eni.securityGroupId

ID grup keamanan tempat kluster berada. Anda dapat memilih grup keamanan yang sudah ada atau membuat yang baru.

Penting

Grup keamanan harus berada dalam VPC yang sama dengan kluster Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.

spark.adb.useJdbc

Menentukan apakah akan menggunakan mode JDBC untuk mengakses data. Nilai yang valid:

  • true: Ya.

  • false (default): Tidak.

Saat menulis data dalam mode real-time, Anda harus mengatur parameter ini ke true.

spark.adb.resourceGroup

Kelompok sumber daya interaktif yang digunakan untuk mengeksekusi pernyataan SQL.

Catatan

Saat membuat kluster Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse, kelompok sumber daya interaktif bernama user_default dibuat secara default. Anda dapat memilih kelompok sumber daya ini atau membuat kelompok sumber daya interaktif lainnya. Untuk informasi selengkapnya tentang cara membuat kelompok sumber daya, lihat Buat dan kelola kelompok sumber daya.

Lihat metode

-- Aktifkan akses berbasis ENI.
SET spark.adb.eni.enabled=true;
SET spark.adb.eni.vswitchId=vsw-bp1sxxsodv28ey5dl****;   
SET spark.adb.eni.securityGroupId=sg-bp19mr685pmg4ihc****;    
-- Buat view.
CREATE TEMPORARY VIEW table_tmp
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:mysql://amv-bp1a74zh****.ads.aliyuncs.com:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true',     
  dbtable 'spark_create_adb_db_test.test_adb_tbl',    
  user 'user',       
  password 'password****'      
);
-- Menulis data.
INSERT INTO table_tmp VALUES (1, 'adb', 20);
-- Mengkueri data.
SELECT * FROM table_tmp;

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

spark.adb.eni.enabled

Mengaktifkan akses berbasis ENI.

Saat mengakses data, Anda harus mengatur parameter spark.adb.eni.enabled ke true.

spark.adb.eni.vswitchId

ID vSwitch tempat kluster berada.

spark.adb.eni.securityGroupId

ID grup keamanan tempat kluster berada. Anda dapat memilih grup keamanan yang sudah ada atau membuat yang baru.

Penting

Grup keamanan harus berada dalam VPC yang sama dengan kluster Edisi Perusahaan, Edisi Dasar, atau Edisi Data Lakehouse.

table_tmp

Nama view. Dalam topik ini, table_tmp digunakan sebagai contoh.

USING org.apache.spark.sql.jdbc

Nilai parameter ini tetap sebagai USING org.apache.spark.sql.jdbc.

url

URL JDBC kluster.

Format: jdbc:mysql://<endpoint:port>/<db_name>?useServerPrepStmts=false&rewriteBatchedStatements=true, dengan:

  • endpoint: titik akhir internal kluster.

  • port: nomor port kluster. Nilainya tetap 3306.

  • db_name: nama database di kluster.

  • useServerPrepStmts=false&rewriteBatchedStatements=true: Konfigurasi ini diperlukan untuk menulis data secara batch. Digunakan untuk meningkatkan kinerja penulisan dan mengurangi beban pada kluster.

Contoh: jdbc:mysql://amv-bp1a74zh****.ads.aliyuncs.com:3306/spark_create_adb_db_test?useServerPrepStmts=false&rewriteBatchedStatements=true.

dbtable

Nama tabel di kluster. Format: db_name.table_name. Dalam topik ini, spark_create_adb_db_test.test_adb_tbl digunakan sebagai contoh.

user

Akun database kluster.

password

Kata sandi akun database.

Item konfigurasi Spark

Saat menggunakan Spark SQL untuk membaca atau menulis data ke tabel C-Store, Anda dapat mengonfigurasi item konfigurasi berikut:

Item konfigurasi

Deskripsi

Nilai default

spark.adb.write.batchSize

Jumlah catatan data yang dapat ditulis per batch. Nilainya harus bilangan bulat positif.

Catatan

Parameter ini hanya didukung saat Anda menulis data dalam mode real-time.

600

spark.adb.write.arrow.maxMemoryBufferSize

Ukuran maksimum buffer memori tulis. Nilainya harus bilangan bulat positif. Satuan: MB.

Catatan

Parameter ini hanya didukung saat Anda menulis data dalam mode batch.

1024

spark.adb.write.arrow.maxRecordSizePerBatch

Jumlah maksimum catatan data yang dapat ditulis per batch. Nilainya harus bilangan bulat positif.

Catatan

Parameter ini hanya didukung saat Anda menulis data dalam mode batch.

500