All Products
Search
Document Center

Hologres:Penulisan batch ke Hologres

Last Updated:Jun 22, 2026

Hologres adalah mesin gudang data real-time satu atap yang kompatibel dengan protokol PostgreSQL. Layanan ini mendukung penulisan, pembaruan, dan kueri volume data besar dalam skenario real-time maupun offline. Berdasarkan hasil pengujian kinerja penulisan batch Spark ke Hologres, topik ini membantu Anda memilih mode penulisan optimal untuk berbagai skenario.

Untuk penulisan dan pembaruan data real-time, lihat Pengujian stres penulisan data, pembaruan, dan kueri titik.

Perbandingan mode penulisan batch

Hologres mendukung beberapa mode penulisan batch, termasuk mode COPY tradisional, mode impor streaming FIXED COPY yang dibangun di atas protokol COPY, serta mode INSERT INTO VALUES yang mengonversi impor batch menjadi penulisan streaming.

Tabel berikut membandingkan ketiga mode penulisan tersebut secara rinci.

Fitur

COPY

FIXED COPY

INSERT INTO VALUES

Deskripsi

Impor batch ke tabel tanpa primary key

Impor batch ke tabel dengan primary key

Mode impor streaming yang dibangun di atas protokol COPY

Mode impor streaming dasar

Kasus penggunaan

  • Impor batch dari Spark

  • Impor batch dari Apache Flink

  • Impor dari Flink

  • Impor dari DataWorks Data Integration

  • Impor streaming dari Spark

  • Impor dari Flink

  • Impor dari DataWorks Data Integration

  • Impor streaming dari Spark

Granularitas kunci

row lock

table lock

row lock

row lock

Visibilitas data

Tampak setelah operasi COPY selesai

Tampak setelah operasi COPY selesai

Tampak secara real time

Tampak secara real time

Kinerja

Tinggi

Tinggi

Sedang

Sedang

Konsumsi resource Hologres

Rendah

Rendah

Tinggi

Tinggi

Konsumsi resource klien

Rendah

Tinggi

Rendah

Sedang

Kebijakan konflik primary key yang didukung

Tidak berlaku

  • NONE

  • UPDATE: Mendukung pembaruan seluruh baris di V3.0.4 atau versi lebih baru dan pembaruan parsial di V3.1.1 atau versi lebih baru.

  • IGNORE: Didukung di V3.0.4 atau versi lebih baru.

  • NONE (mengembalikan error jika terjadi konflik)

  • UPDATE

  • IGNORE

  • NONE (mengembalikan error jika terjadi konflik)

  • UPDATE

  • IGNORE

Pemilihan mode penulisan batch

Dalam skenario penulisan batch, ketiga mode tersebut memiliki karakteristik sebagai berikut:

  • Mode COPY: Mode COPY tradisional menawarkan kinerja penulisan terbaik sekaligus mengonsumsi sumber daya Hologres paling sedikit.

  • Mode FIXED COPY: Mode impor streaming yang dibangun di atas protokol COPY. Mode ini hanya menghasilkan row lock dan menyediakan visibilitas data real time.

  • Mode INSERT INTO VALUES: Mode ini mengonversi impor batch menjadi penulisan streaming tradisional dan tidak memberikan keunggulan signifikan dalam skenario penulisan batch.

    Catatan

    Mode INSERT INTO VALUES tidak memiliki keunggulan khas dalam skenario penulisan batch. Namun, mode ini merupakan satu-satunya mode yang mendukung retraksi data (penghapusan) dan diperlukan untuk kasus penggunaan seperti penulisan data log biner.

Kecuali jika Anda memiliki persyaratan khusus terkait visibilitas data real time, granularitas kunci (table lock mencegah tugas penulisan konkuren), atau beban sumber data, kami merekomendasikan penggunaan mode COPY untuk penulisan batch.

  • Untuk penulisan batch dari Spark: Kami merekomendasikan meningkatkan instans Hologres Anda ke V2.2.25 atau versi lebih baru dan mengatur parameter write write.mode untuk konektor ke auto (nilai default). Sistem kemudian akan secara otomatis memilih mode penulisan batch optimal.

  • Untuk penulisan batch dari Flink: Pertama, gunakan pohon keputusan di bawah ini untuk memilih antara mode COPY atau mode FIXED COPY. Kemudian, konfigurasikan parameter berikut:

    • jdbccopywritemode: Atur ke TRUE. Ini mencegah penggunaan mode INSERT INTO VALUES.

    • bulkload: Atur ke TRUE untuk mode COPY atau FALSE untuk mode FIXED COPY sesuai kebutuhan Anda.

Gunakan pohon keputusan berikut untuk memilih mode penulisan batch yang sesuai dengan skenario Anda.

Pengujian kinerja penulisan batch

Pengujian ini menggunakan open-source Hologres-Spark-Connector milik Hologres.

Prasyarat

Persiapan lingkungan

Sebelum memulai, pastikan Anda telah menyiapkan lingkungan berikut:

Penting

Instans Hologres dan kluster EMR Spark harus berada di wilayah yang sama dan menggunakan VPC yang sama.

  • Siapkan instans Hologres versi V2.2.25 atau lebih baru dan buat database.

  • Buat kluster EMR Spark yang menjalankan Spark 3.3.0 atau versi lebih baru. Untuk informasi lebih lanjut, lihat Buat kluster.

  • Unduh paket Spark-Connector.

    Untuk mengaktifkan Spark agar dapat membaca dari dan menulis ke Hologres, unduh file JAR hologres-connector-spark-3.x dari Maven Central Repository.

Tabel berikut menjelaskan lingkungan yang digunakan untuk pengujian kinerja.

Layanan

Versi

Spesifikasi

Hologres

V3.0.30

64 core, 256 GB (1 CU = 1 core, 4 GB)

EMR Spark

EMR-5.18.1, Spark-3.5.3

8 core, 32 GB × 8 (1 node master, 7 node core)

Penting

Anda harus mengaktifkan layanan OSS-HDFS.

Spark-Connector

1.5.2

N/A

Persiapan data uji

  1. Siapkan data sumber.

    1. Login ke node master kluster EMR Spark. Untuk informasi lebih lanjut, lihat Hubung ke instans ECS.

    2. Unduh paket tool TPC-H_Tools_v3.0.0.zip. Lalu, salin paket tersebut ke instans ECS node master, ekstrak, dan masuk ke direktori TPC-H_Tools_v3.0.0/TPC-H_Tools_v3.0.0/dbgen.

    3. Jalankan perintah berikut di direktori dbgen untuk menghasilkan file customer.tbl untuk set data uji 1 TB.

      ./dbgen -s 1000 -T c

      Tabel berikut menjelaskan tabel customer dalam dataset TPC-H 1 TB.

      Item

      Deskripsi

      Jumlah bidang

      8

      Tipe bidang

      INT, BIGINT, TEXT, DECIMAL

      Jumlah baris

      150.000.000

      Jumlah shard

      40

  2. Impor data uji ke Spark.

    Jalankan perintah berikut untuk mengunggah file customer.tbl ke kluster Spark.

    hadoop fs -put customer.tbl <spark_resource>

    Dalam perintah tersebut, spark_resource mengacu pada Root Storage Directory of Cluster yang Anda atur saat membuat kluster EMR Spark.

  3. Penyimpanan hibrida baris-kolom

    CREATE TABLE test_table_mixed (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column,row'
    );

    Penyimpanan berorientasi kolom (dengan primary key)

    CREATE TABLE test_table_column (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column'
    );

    Penyimpanan berorientasi kolom (tanpa primary key)

    CREATE TABLE test_table_column_no_pk (
        C_CUSTKEY BIGINT,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column'
    );

    Penyimpanan berorientasi baris (dengan primary key)

    CREATE TABLE test_table_row (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'row'
    );

    Penyimpanan berorientasi baris (tanpa primary key)

    CREATE TABLE test_table_row_no_pk (
        C_CUSTKEY BIGINT,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'row'
    );

Pengujian kinerja

Konfigurasi pengujian

Topik ini menguji kinerja impor berbagai mode.

  1. Login ke node master kluster EMR Spark. Untuk informasi lebih lanjut, lihat Hubung ke instans ECS. Unggah paket Spark-Connector yang telah diunduh, lalu jalankan perintah berikut untuk masuk ke shell interaktif Spark SQL.

    Catatan

    Anda dapat menyesuaikan nilai parameter spark.sql.files.maxPartitionBytes untuk mengontrol konkurensi pembacaan file HDFS di Spark. Dalam contoh ini, konkurensi diatur ke 40.

    # Masuk ke shell interaktif Spark SQL.
    spark-sql --jars <path>/hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \
    --conf spark.executor.instances=40 \
    --conf spark.executor.cores=1 \
    --conf spark.executor.memory=4g \
    --conf spark.sql.files.maxPartitionBytes=644245094

    Dalam perintah tersebut, path adalah direktori yang berisi file hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar.

  2. Di shell interaktif Spark SQL, jalankan pernyataan SQL berikut untuk membuat tampilan sementara dan menulis data.

    Tabel sementara digunakan dalam pengujian ini untuk memudahkan penyesuaian parameter saat mengevaluasi kinerja penulisan berbagai mode.

    Catatan

    Dalam praktiknya, Anda juga dapat menggunakan catalog untuk memuat tabel Hologres secara langsung.

    -- Buat tabel sementara dalam format CSV.
    CREATE TEMPORARY VIEW csvtable (
      c_custkey BIGINT,
      c_name STRING,
      c_address STRING,
      c_nationkey INT,
      c_phone STRING,
      c_acctbal DECIMAL(15, 2),
      c_mktsegment STRING,
      c_comment STRING)
    USING csv OPTIONS (
      path "<spark_resources>/customer.tbl", sep "|"
    );
    CREATE TEMPORARY VIEW hologresTable (
      c_custkey BIGINT,
      c_name STRING,
      c_address STRING,
      c_nationkey INT,
      c_phone STRING,
      c_acctbal DECIMAL(15, 2),
      c_mktsegment STRING,
      c_comment STRING)
    USING hologres OPTIONS (
      jdbcurl "jdbc:postgresql://<hologres_vpc_endpoint>/<database_name>",
      username "<accesskey_id>", 
      password "<accesskey_secret>", 
      table "<table_name>",
      direct_connect "false",
      write.mode "auto",
      write.insert.thread_size "3",
      write.insert.batch_size "2048"
    );
    INSERT INTO hologresTable SELECT * FROM csvTable;

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    spark_resources

    cluster root storage path yang Anda konfigurasi saat membuat kluster EMR Spark.

    Anda dapat menemukan path ini di bagian Cluster Information pada halaman Basic Information kluster Anda di Konsol EMR on ECS.

    hologres_vpc_endpoint

    Domain Name VPC dari instans Hologres.

    Anda dapat login ke Konsol Hologres, klik ID instans target, lalu temukan endpoint untuk VPC yang ditentukan di bagian informasi jaringan pada halaman detail instans. Contohnya, endpoint VPC di wilayah China (Hangzhou) memiliki format <Instance ID>-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80.

    database_name

    Nama database di instans Hologres.

    accesskey_id

    ID AccessKey dengan izin baca pada database Hologres yang ditentukan.

    accesskey_secret

    Rahasia AccessKey dengan izin baca pada database Hologres yang ditentukan.

    table_name

    Nama tabel Hologres tujuan.

    write.mode

    Mode penulisan. Nilai yang valid:

    • auto: Nilai default. Konektor secara otomatis memilih mode optimal.

    • insert: Menulis data menggunakan pernyataan INSERT INTO VALUES.

    • stream: Melakukan penulisan streaming menggunakan FIXED COPY.

    • bulk_load: Melakukan impor batch ke tabel tanpa primary key menggunakan COPY.

    • bulk_load_on_conflict: Melakukan impor batch ke tabel dengan primary key menggunakan COPY.

    write.insert.thread_size

    Konkurensi penulisan. Parameter ini hanya berlaku untuk mode insert.

    write.insert.batch_size

    Ukuran batch penulisan. Parameter ini hanya berlaku untuk mode insert.

    write.on_conflict_action

    INSERT_OR_REPLACE (default): Jika terjadi konflik primary key, data diperbarui.

    INSERT_OR_IGNORE: Jika terjadi konflik primary key, data diabaikan.

    Untuk informasi lebih lanjut tentang parameter, lihat Parameter.

Skenario pengujian

Skenario pengujian

Opsi

Format penyimpanan tabel

  • Penyimpanan berorientasi baris

  • Penyimpanan berorientasi kolom

  • Penyimpanan hibrida baris-kolom

Metode pembaruan data

  • Penulisan append-only ke tabel tanpa primary key

  • Penulisan awal ke tabel kosong dengan primary key

  • Pembaruan seluruh baris ke tabel dengan primary key

Mode penulisan

  • insert (INSERT INTO VALUES)

  • stream (FIXED COPY)

  • bulk_load (impor COPY ke tabel tanpa primary key)

  • bulk_load_on_conflict (impor COPY ke tabel dengan primary key)

Hasil pengujian

Hasil pengujian mencakup bidang-bidang berikut:

Bidang

Deskripsi

Durasi total pekerjaan

Waktu total eksekusi pekerjaan Spark.

Nilai ini adalah waktu yang dibutuhkan untuk mengeksekusi operasi INSERT di shell interaktif Spark SQL pada node kluster EMR Spark. Durasi ini muncul di baris Time taken pada output shell:

spark-sql (default)> insert into hologresTable select * from csvTable;
25/04/11 15:05:51 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:05:52 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:05:52 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:02 WARN [main] PGStream: create socket to
25/04/11 15:06:02 WARN [main] JDBCUtil$: could not connect directly
25/04/11 15:06:03 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:04 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:04 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:05 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:05 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:06 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:06 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:07 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:07 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:09 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:09 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:10 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:10 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:11 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:11 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:12 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:12 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
25/04/11 15:06:13 WARN [embedded-hologres-connector-spark-SparkSQL::xxx -worker]
Time taken: 228.901 seconds

Durasi rata-rata penulisan data

Durasi rata-rata pekerjaan penulisan itu sendiri, tidak termasuk waktu yang dihabiskan untuk penjadwalan kluster Spark, pembacaan data, atau pengacakan data.

Di halaman HoloWeb pada Konsol Hologres, jalankan pernyataan SQL berikut untuk mendapatkan konkurensi shard (nilai dari COUNT(*)) dan durasi rata-rata penulisan data (avg_duration_ms) dalam milidetik:

SELECT
    COUNT(*), AVG(duration) AS avg_duration_ms
FROM
    hologres.hg_query_log
WHERE
    query_start >= '<start_time>' AND query_start <= '<end_time>'
    AND query LIKE '%<hologres_table_name>%' AND command_tag = 'COPY';

Tabel berikut menjelaskan parameter-parameter tersebut.

  • start_time: Waktu mulai operasi penulisan data, misalnya 2024-04-11 15:00:00.

  • end_time: Waktu akhir operasi penulisan data, misalnya 2024-04-11 15:10:00.

  • hologres_table_name: Nama tabel Hologres tujuan, misalnya your_table_name.

Beban Hologres

Pemanfaatan CPU instans Hologres.

Anda dapat memperoleh pemanfaatan CPU di halaman Monitoring Information instans di Konsol Hologres.

Beban Spark

Beban pada node EMR.

Di Konsol EMR on ECS, buka tab Monitoring and Diagnostics > Metric Monitoring untuk kluster Anda dan konfigurasikan pengaturan berikut:

  • Dashboard: Pilih HOST.

  • nodeGroupId: Pilih ID kelompok node core kluster.

  • hostname: Pilih node core.

  • Select Time: Pilih periode waktu yang mencakup operasi penulisan data Spark.

Kemudian, kueri metrik CPU utilization untuk melihat beban Spark.

Tabel berikut menunjukkan hasil pengujian lengkap.

Format penyimpanan

Primary key

Mode penulisan

Durasi total pekerjaan

Durasi rata-rata penulisan

Pemuatan Hologres

Pemuatan Spark

Penyimpanan berorientasi kolom

Tanpa primary key

insert

241,61 dtk

232,70 dtk

92%

15%

stream

228,11 dtk

222,34 dtk

100%

36%

bulk_load

88,72 dtk

57,16 dtk

97%

47%

Dengan primary key

ignore

insert

190,96 dtk

172,60 dtk

90%

14%

stream

149,60 dtk

142,16 dtk

100%

14%

bulk_load_on_conflict

115,96 dtk

42,92 dtk

60%

75%

Dengan primary key

replace

insert

600,40 dtk

574,31 dtk

91%

5%

stream

550,29 dtk

540,32 dtk

100%

5%

bulk_load_on_conflict

188,05 dtk

109,77 dtk

93%

78%

Penyimpanan berorientasi baris

Tanpa primary key

insert

132,38 dtk

123,79 dtk

94%

22%

stream

114,41 dtk

103,81 dtk

100%

17%

bulk_load

68,20 dtk

41,22 dtk

98%

32%

Dengan primary key

ignore

insert

190,48 dtk

170,49 dtk

89%

15%

stream

185,46 dtk

172,48 dtk

85%

14%

bulk_load_on_conflict

117,81 dtk

47,69 dtk

58%

75%

Dengan primary key

replace

insert

177,97 dtk

170,78 dtk

93%

15%

stream

142,44 dtk

130,16 dtk

100%

20%

bulk_load_on_conflict

137,69 dtk

65,18 dtk

92%

78%

Penyimpanan hibrida baris-kolom

Dengan primary key

ignore

insert

172,19 dtk

158,74 dtk

86%

16%

stream

150,63 dtk

149,76 dtk

100%

12%

bulk_load_on_conflict

128,83 dtk

42,09 dtk

59%

79%

Dengan primary key

replace

insert

690,37 dtk

662,00 dtk

92%

5%

stream

625,84 dtk

623,08 dtk

100%

4%

bulk_load_on_conflict

202,07 dtk

121,58 dtk

93%

80%

Catatan

Mode penulisan tersebut berkorespondensi dengan operasi berikut:

  • insert: INSERT INTO VALUES

  • stream: FIXED COPY

  • bulk_load: Impor COPY ke tabel tanpa primary key

  • bulk_load_on_conflict: Impor COPY ke tabel dengan primary key