全部产品
Search
文档中心

:Gunakan Spark untuk mengimpor data

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan Spark untuk membaca data dari berbagai jenis sumber dan menulisnya ke Hologres.

Informasi latar belakang

Spark adalah mesin analitik yang memproses sejumlah besar data secara terpusat. Hologres terintegrasi dengan Apache Spark dan E-MapReduce (EMR) Spark untuk membantu Anda membangun gudang data secara efisien. Hologres menyediakan konektor Spark yang dapat digunakan untuk menulis data ke Hologres dalam mode batch. Anda dapat menggunakan Spark untuk membaca data dari berbagai jenis sumber seperti file, tabel Hive, tabel MySQL, dan tabel PostgreSQL.

Hologres kompatibel dengan PostgreSQL. Anda dapat menggunakan Spark untuk membaca data Hologres berdasarkan PostgreSQL. Kemudian, Anda dapat mengekstraksi, mentransformasi, dan memuat (ETL) data tersebut, serta menulis data yang telah diproses kembali ke Hologres atau ke tujuan lainnya.

Prasyarat

  • Versi instance Hologres Anda adalah V0.9 atau lebih baru. Anda dapat melihat versi instance Hologres di halaman detail instance pada konsol Hologres. Jika versi instance Hologres Anda lebih lama dari V0.9, tingkatkan instance Hologres secara manual di konsol Hologres atau bergabunglah dengan grup DingTalk Hologres untuk mendapatkan dukungan teknis. Untuk informasi lebih lanjut tentang cara menaikkan versi instance Hologres secara manual di konsol Hologres, lihat Peningkatan Instance. Untuk informasi lebih lanjut tentang cara mendapatkan dukungan teknis, lihat Dapatkan Dukungan Online untuk Hologres.

  • Lingkungan Spark dengan versi yang didukung oleh Hologres telah diinstal. Dengan cara ini, Anda dapat menjalankan perintah spark-shell di lingkungan Spark.

Penggunaan koneksi

Saat menggunakan konektor Spark Hologres untuk membaca atau menulis data, koneksi Java Database Connectivity (JDBC) digunakan. Jumlah koneksi yang digunakan dipengaruhi oleh item-item berikut:

  • Jumlah tugas Spark paralel: Anda dapat memperoleh jumlah tersebut di UI Spark saat pekerjaan sedang berjalan.

  • Mode penulisan data: Jika Anda menggunakan konektor Spark untuk menulis data dalam mode salinan tetap, setiap tugas paralel menggunakan satu koneksi JDBC. Jika Anda menggunakan pernyataan INSERT untuk menulis data, jumlah koneksi JDBC yang digunakan oleh setiap tugas paralel sama dengan nilai write_thread_size. Setiap tugas paralel untuk pembacaan data menggunakan satu koneksi JDBC.

  • Lainnya: Saat pekerjaan dimulai, informasi skema mungkin perlu diperoleh. Dalam hal ini, koneksi JDBC mungkin digunakan untuk waktu yang singkat.

Jumlah total koneksi JDBC yang digunakan oleh pekerjaan dapat dihitung menggunakan rumus berikut:

  • Mode salinan tetap: Paralelisme × 1 + 1

  • Pernyataan INSERT: Paralelisme × write_thread_size + 1

Catatan

Paralelisme tugas Spark dipengaruhi oleh pengaturan parameter manual dan kebijakan pemblokiran file Hadoop.

(Direkomendasikan) Gunakan konektor Spark untuk menulis data ke Hologres

Kami merekomendasikan agar Anda menggunakan konektor Spark bawaan Hologres untuk menulis data ke Hologres. Konektor Spark digunakan bersama dengan Holo Client. Dibandingkan dengan metode lain untuk menulis data, konektor Spark memberikan performa penulisan yang lebih baik. Untuk menggunakan konektor Spark untuk menulis data, ikuti langkah-langkah berikut. Untuk informasi lebih lanjut tentang kode contoh, lihat bagian Contoh Penggunaan Konektor Spark untuk Menulis Data ke Hologres dalam topik ini.

Persiapan

  1. Dapatkan paket JAR.

    Konektor Spark tersedia untuk Spark 2 dan Spark 3. Saat menggunakan konektor Spark untuk menulis data ke Hologres, Anda harus merujuk pada paket JAR konektor Spark. Paket JAR sudah diterbitkan di repositori pusat Maven. Anda dapat merujuk pada file pom.xml berikut untuk konfigurasi.

    Catatan

    Konektor terkait juga bersifat open-source. Untuk informasi lebih lanjut, kunjungi halaman alibabacloud-hologres-connectors.

    <dependency>
        <groupId>com.alibaba.hologres</groupId>
        <artifactId>hologres-connector-spark-3.x</artifactId>
        <version>1.4.0</version>
        <classifier>jar-with-dependencies</classifier>
    </dependency>

    Anda dapat mengklik tautan berikut untuk mengunduh paket JAR yang disediakan oleh Hologres:

  2. Gunakan paket JAR.

    Jalankan perintah berikut untuk memulai Spark dan memuat konektor:

    spark-shell --jars hologres-connector-spark-3.x-1.4.0-SNAPSHOT-jar-with-dependencies.jar

    Anda juga dapat menjalankan perintah berikut untuk memulai PySpark dan memuat konektor:

    pyspark --jars hologres-connector-spark-3.x-1.4.0-SNAPSHOT-jar-with-dependencies.jar

Contoh penggunaan konektor Spark untuk menulis data ke Hologres

Contoh berikut menunjukkan cara menggunakan konektor Spark untuk menulis data ke Hologres.

  1. Buat tabel di Hologres.

    Eksekusi pernyataan SQL berikut di Hologres untuk membuat tabel tempat Anda ingin menulis data:

    CREATE TABLE tb008 (
      id BIGINT primary key,
      counts INT,
      name TEXT,
      price NUMERIC(38, 18),
      out_of_stock BOOL,
      weight DOUBLE PRECISION,
      thick FLOAT,
      time TIMESTAMPTZ,
      dt DATE, 
      by bytea,
      inta int4[],
      longa int8[],
      floata float4[],
      doublea float8[],
      boola boolean[],
      stringa text[]
    );
  2. Siapkan data di Spark dan tulis data tersebut ke Hologres.

    1. Jalankan perintah berikut di CLI untuk mengaktifkan konektor Spark:

      spark-shell --jars hologres-connector-spark-3.x-1.4.0-SNAPSHOT-jar-with-dependencies.jar
    2. Jalankan perintah load spark-test.scala di spark-shell untuk memuat data sampel.

      File spark-test.scala berisi data berikut:

      import java.sql.{Timestamp, Date}
      import org.apache.spark.sql.types._
      import org.apache.spark.sql.Row
      
      val byteArray = Array(1.toByte, 2.toByte, 3.toByte, 'b'.toByte, 'a'.toByte)
      val intArray = Array(1, 2, 3)
      val longArray = Array(1L, 2L, 3L)
      val floatArray = Array(1.2F, 2.44F, 3.77F)
      val doubleArray = Array(1.222, 2.333, 3.444)
      val booleanArray = Array(true, false, false)
      val stringArray = Array("abcd", "bcde", "defg")
      
      val data = Seq(
        Row(-7L, 100, "phone1", BigDecimal(1234.567891234), false, 199.35, 6.7F, Timestamp.valueOf("2021-01-01 00:00:00"), Date.valueOf("2021-01-01"), byteArray, intArray, longArray, floatArray, doubleArray, booleanArray, stringArray),
        Row(6L, -10, "phone2", BigDecimal(1234.56), true, 188.45, 7.8F, Timestamp.valueOf("2021-01-01 00:00:00"), Date.valueOf("1970-01-01"), byteArray, intArray, longArray, floatArray, doubleArray, booleanArray, stringArray),
        Row(1L, 10, "phone3\"", BigDecimal(1234.56), true, 111.45, null, Timestamp.valueOf("2020-02-29 00:12:33"), Date.valueOf("2020-07-23"), byteArray, intArray, longArray, floatArray, doubleArray, booleanArray, stringArray)
      )
      
      
      val schema = StructType(Array(
        StructField("id", LongType),
        StructField("counts", IntegerType),
        StructField("name", StringType, false), // Nilai false menunjukkan bahwa nilai bidang ini tidak boleh null di tabel.
        StructField("price", DecimalType(38, 12)),
        StructField("out_of_stock", BooleanType),
        StructField("weight", DoubleType),
        StructField("thick", FloatType),
        StructField("time", TimestampType),
        StructField("dt", DateType),
        StructField("by", BinaryType),
        StructField("inta", ArrayType(IntegerType)),
        StructField("longa", ArrayType(LongType)),
        StructField("floata", ArrayType(FloatType)),
        StructField("doublea", ArrayType(DoubleType)),
        StructField("boola", ArrayType(BooleanType)),
        StructField("stringa", ArrayType(StringType))
      ))
      
      
      val df = spark.createDataFrame(
        spark.sparkContext.parallelize(data),
        schema
      )
      df.show()
      
      // Konfigurasikan parameter berikut untuk menulis data sampel ke Hologres. 
      df.write.format("hologres") // Atur nilainya menjadi hologres.
        .option("username", "your_username") // ID AccessKey akun Alibaba Cloud Anda. 
        .option("password", "your_password") // Rahasia AccessKey akun Alibaba Cloud Anda. 
        .option("endpoint", "Ip:Port") // Alamat IP dan nomor port instance Hologres Anda. 
        .option("database", "test_database") // Nama database Hologres. Nama tersebut adalah test_database dalam contoh ini. 
        .option("table", "tb008") // Nama tabel Hologres tempat Anda ingin menulis data. Nama tabel tersebut adalah tb008 dalam contoh ini. 
        .option("write_batch_size", 512) // Jumlah maksimum permintaan tulis yang diizinkan dalam satu batch. Untuk informasi lebih lanjut, lihat deskripsi parameter di bagian "Gunakan Spark untuk menulis data ke Hologres secara real-time".
        .option("input_data_schema_ddl", df.schema.toDDL) // Pernyataan bahasa definisi data (DDL) untuk DataFrame. Parameter ini hanya diperlukan untuk Spark 3.X.
        .mode(SaveMode.Append) // Mode penyimpanan antarmuka Spark DataFrameWriter. Nilainya harus Append. Parameter ini berbeda dari parameter WRITE_MODE. Nilai OverWrite didukung untuk hologres-connector 1.3.3 dan yang lebih baru. Jika Anda mengatur parameter ini ke OverWrite, data di tabel sumber akan dihapus. Berhati-hatilah saat menggunakan nilai ini.
        .save()
  3. Kueri data di tabel tujuan.

    Anda dapat mengkueri data di tabel tujuan di konsol Hologres untuk memeriksa data yang telah ditulis. Gambar berikut menunjukkan sebuah contoh.测试示例数据

Contoh penggunaan konektor PySpark untuk menulis data ke Hologres

  1. Mulai PySpark dan muat konektor PySpark.

    pyspark --jars hologres-connector-spark-3.x-1.4.0-SNAPSHOT-jar-with-dependencies.jar

  2. Gunakan metadata untuk membuat objek DataFrame dan panggil konektor untuk menulis data ke Hologres. Operasinya mirip dengan operasi saat menggunakan konektor Spark.

    data = [[1, "Elia"], [2, "Teo"], [3, "Fang"]]
    df = spark.createDataFrame(data, schema="id LONG, name STRING")
    df.show()
    
    df2.write.format("hologres").option(
      "username", "your_username").option(
      "password", "your_password").option(
      "endpoint", "hologres_endpoint").option(
      "database", "test_database").option(
      "table", "tb008").save()
    

Gunakan Spark SQL untuk memuat konektor untuk penulisan data ke Hologres

Catatan

Hanya konektor Spark untuk Spark 3 yang mendukung mode ini.

  1. Mulai Spark SQL dan muat konektor Spark.

    spark-sql --jars hologres-connector-spark-3.x-1.4.0-SNAPSHOT-jar-with-dependencies.jar
  2. Eksekusi pernyataan DDL Spark SQL berikut untuk membuat tampilan CSV dan tampilan Hologres, lalu tulis data ke dalamnya:

    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 "resources/customer1.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_endpoint/test_database",
      username "your_username", 
      password "your_password", 
      table "customer_holo_table", 
      copy_write_mode "true", 
      bulk_load "true", 
      copy_write_format "text"
    );
    
    -- Anda tidak dapat menulis data ke kolom tertentu dari tampilan Hologres yang dibuat menggunakan pernyataan SQL. Misalnya, Anda tidak dapat mengeksekusi pernyataan insert into hologresTable(c_custkey) select c_custkey from csvTable. Saat Anda menulis data, Anda harus menulis data ke semua kolom yang dideklarasikan dalam pernyataan DDL. Jika Anda ingin menulis data ke kolom tertentu, Anda dapat mendeklarasikan hanya kolom-kolom ini saat Anda membuat tabel. 
    INSERT INTO hologresTable SELECT * FROM csvTable;

Gunakan Spark untuk membaca data dari jenis sumber tertentu dan menulis data tersebut ke Hologres

  1. Baca data dari jenis sumber tertentu.

    Anda dapat menggunakan Spark untuk membaca data dari berbagai jenis sumber. Contoh-contoh berikut menunjukkan cara membaca data dari Hologres atau jenis sumber lainnya:

    • Baca data dari Hologres

      Hologres kompatibel dengan PostgreSQL. Anda dapat menggunakan Spark untuk membaca data Hologres berdasarkan driver JDBC PostgreSQL. Contoh kode berikut hanya untuk referensi.

      Catatan

      Sebelum membaca data Hologres, unduh paket JAR PostgreSQL JDBC JAR di situs resmi. Dalam contoh ini, postgresql-42.2.18 digunakan. Kemudian, jalankan perintah ./bin/spark-shell --jars /path/to/postgresql-42.2.18.jar di spark-shell untuk memuat paket JAR JDBC PostgreSQL. Anda juga dapat memuat paket JAR JDBC PostgreSQL bersama dengan paket JAR konektor Spark Hologres.

      // Baca dari beberapa tabel, misalnya: tb008
      val readDf = spark.read
        .format("jdbc") // Baca data Hologres berdasarkan driver JDBC PostgreSQL.
        .option("driver","org.postgresql.Driver")
        .option("url", "jdbc:postgresql://Ip:Por/test_database")
        .option("dbtable", "tb008")
        .option("user", "your_username")
        .option("password", "your_password")
        .load()

      Konektor Spark V1.3.2 dan yang lebih baru memungkinkan Anda membaca data dari Hologres dan mengoptimalkan performa pembacaan data paralel. Dibandingkan dengan driver JDBC PostgreSQL, konektor Spark memungkinkan Anda mengonfigurasi paralelisme pembacaan data dan mendukung sharding data di Hologres untuk mengimplementasikan pembacaan data paralel. Hal ini secara signifikan meningkatkan performa. Contoh kode:

      val spark = SparkSession
      .builder
      .appName("ReadFromHologres")
      .master("local[*]")
      .getOrCreate()
      
      spark.sparkContext.setLogLevel("WARN")
      
      import spark.implicits._
      
      val schema = StructType(Array(
        StructField("id", LongType),
        StructField("counts", IntegerType),
        StructField("name", StringType, false),
        StructField("price", DecimalType(38, 12)),
        StructField("out_of_stock", BooleanType)
      ))
      
      val readDf = spark.read
      .format("hologres")
      .schema(schema) // Opsional. Jika Anda tidak menentukan skema, semua bidang di tabel Hologres akan dibaca secara default.
      .option("username", "your_username")
      .option("password", "your_password")
      .option("jdbcurl", "jdbc:postgresql://hologres_endpoint/test_db")
      .option("table", "tb008")
      .option("scan_parallelism", "10") // Paralelisme default untuk membaca data dari Hologres. Nilai maksimumnya adalah jumlah shard tabel Hologres.
      .load()

    • Baca data dari jenis sumber lain seperti file Parquet

      Anda dapat menggunakan Spark untuk membaca data dari jenis sumber lain, seperti file Parquet atau tabel Hive. Contoh berikut memberikan kode contoh:

      import org.apache.spark.{SparkConf, SparkContext}
      import org.apache.spark.sql.hive.HiveContext
      
      val sparkConf = new SparkConf()
      val sc = new SparkContext(sparkConf)
      val hiveContext = new HiveContext(sc)
      
      // Baca dari beberapa tabel, misalnya: phone
      val readDf = hiveContext.sql("select * from hive_database.phone")
  2. Tulis data tersebut ke Hologres.

    import com.alibaba.hologres.spark2.sink.SourceProvider
    
    -- Tulis ke tabel hologres
    df.write
      .format("hologres")
      .option(SourceProvider.USERNAME, "your_username")
      .option(SourceProvider.PASSWORD, "your_password")
      .option(SourceProvider.ENDPOINT, "Ip:Port")
      .option(SourceProvider.DATABASE, "test_database")
      .option(SourceProvider.TABLE, table)
      .option(SourceProvider.WRITE_BATCH_SIZE, 512) -- Jumlah maksimum permintaan yang diizinkan dalam satu batch.
      .option(SourceProvider.INPUT_DATA_SCHEMA_DDL, df.schema.toDDL) -- Parameter ini hanya diperlukan untuk Spark 3.X.
      .mode(SaveMode.Append) // Parameter ini hanya diperlukan untuk Spark 3.X.
      .save()

Gunakan Spark untuk menulis data ke Hologres secara real-time

  1. Eksekusi pernyataan berikut untuk membuat tabel tempat Anda ingin menulis data di Hologres:

    CREATE TABLE test_table_stream
    (
        value text,
        count bigint
    );
  2. Baca data dari mesin lokal Anda. Kumpulkan statistik frekuensi kata dan tulis statistik tersebut ke Hologres secara real-time. Contoh berikut memberikan kode contoh:

    • Kode

       val spark = SparkSession
            .builder
            .appName("StreamToHologres")
            .master("local[*]")
            .getOrCreate()
      
          spark.sparkContext.setLogLevel("WARN")
          import spark.implicits._
      
          val lines = spark.readStream
            .format("socket")
            .option("host", "localhost")
            .option("port", 9999)
            .load()
      
          -- Pisahkan baris menjadi kata-kata
          val words = lines.as[String].flatMap(_.split(" "))
      
          -- Hasilkan hitungan kata berjalan
          val wordCounts = words.groupBy("value").count()
      
          wordCounts.writeStream
              .outputMode(OutputMode.Complete())
              .format("hologres")
              .option(SourceProvider.USERNAME, "your_username")
              .option(SourceProvider.PASSWORD, "your_password")
              .option(SourceProvider.JDBCURL, "jdbc:postgresql://Ip:Port/dbname")
              .option(SourceProvider.TABLE, "test_table_stream")
              .option("batchsize", 1)
              .option("isolationLevel", "NONE")
              .option("checkpointLocation", checkpointLocation)
              .start()
              .awaitTermination()
    • Parameter

      Parameter

      Nilai default

      Diperlukan

      Deskripsi

      username

      Tidak ada nilai default

      Ya

      ID AccessKey akun Alibaba Cloud Anda. Anda dapat memperoleh ID AccessKey di halaman Manajemen Keamanan.

      Kami merekomendasikan agar Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Ini membantu mengurangi risiko kebocoran.

      password

      Tidak ada nilai default

      Ya

      Rahasia AccessKey akun Alibaba Cloud Anda. Anda dapat memperoleh Rahasia AccessKey di halaman Manajemen Keamanan.

      Kami merekomendasikan agar Anda mengonfigurasi variabel lingkungan dan memperoleh ID AccessKey dan Rahasia AccessKey dari variabel lingkungan. Ini membantu mengurangi risiko kebocoran.

      table

      Tidak ada nilai default

      Ya

      Nama tabel Hologres tempat Anda ingin menulis data.

      endpoint

      Tidak ada nilai default

      Konfigurasikan parameter ini atau parameter JDBCURL.

      Titik akhir instance Hologres Anda.

      Anda dapat memperoleh titik akhir instance Hologres Anda di bagian Network Information halaman detail instance di konsol Hologres.

      database

      Tidak ada nilai default

      Konfigurasikan parameter ini atau parameter JDBCURL.

      Nama database Hologres tempat tabel tujuan berada.

      jdbcurl

      Tidak ada nilai default

      Konfigurasikan hanya parameter ini atau parameter ENDPOINT dan DATABASE.

      JDBC URL dari instance Hologres Anda.

      copy_write_mode

      true

      Tidak

      Menentukan apakah akan menulis data dalam mode salinan tetap. Salinan tetap adalah fitur baru yang didukung di Hologres V1.3. Dalam mode salinan tetap, data ditulis dalam mode streaming daripada dalam batch. Oleh karena itu, penulisan data dalam mode salinan tetap memberikan throughput lebih tinggi dan latensi data lebih rendah, serta mengonsumsi lebih sedikit sumber daya memori klien dibandingkan dengan penulisan data menggunakan pernyataan INSERT.

      Catatan

      Jika Anda ingin menggunakan mode salinan tetap, versi konektor harus V1.3.0 atau lebih baru, dan versi mesin Hologres harus V1.3.34 atau lebih baru.

      copy_write_format

      false

      Tidak

      Menentukan apakah akan memeriksa data kotor. Parameter ini hanya berlaku saat COPY_WRITE_MODE disetel ke true. Jika Anda menyetel parameter ini ke true dan data kotor dihasilkan, sistem dapat menemukan baris yang gagal ditulis.

      Catatan

      Pemeriksaan data kotor berdampak negatif pada performa penulisan. Kami merekomendasikan agar Anda menyetel parameter ini ke true hanya selama proses pemecahan masalah.

      bulk_load

      true

      Tidak

      Menentukan apakah akan menulis data ke Hologres dalam mode salinan batch. Dalam mode salinan tetap, data ditulis dalam mode streaming.

      Catatan
      • Dalam Hologres V2.1, performa penulisan data ke tabel tanpa kunci utama dioptimalkan. Dalam Hologres V2.1, operasi penulisan data ke tabel tanpa kunci utama dalam mode batch tidak memperoleh kunci tabel tetapi memperoleh kunci baris. Dengan cara ini, penulisan data dalam mode batch dapat dilakukan secara paralel dengan operasi yang dilakukan menggunakan rencana tetap. Ini membantu meningkatkan efisiensi pemrosesan data dan paralelisme.

      • Jika versi konektor adalah V1.4.0 atau lebih baru, versi mesin Hologres harus V2.1.0 atau lebih baru.

      max_cell_buffer_size

      20971520 (20 MB)

      Tidak

      Panjang maksimum bidang saat COPY_WRITE_MODE disetel ke true.

      copy_write_dirty_data_check

      false

      Tidak

      Menentukan apakah akan memeriksa data kotor. Jika Anda menyetel parameter ini ke true dan data kotor dihasilkan, sistem dapat menemukan baris yang gagal ditulis. Pemeriksaan data kotor berdampak negatif pada performa penulisan. Kami merekomendasikan agar Anda menyetel parameter ini ke true hanya selama proses pemecahan masalah.

      Catatan

      Parameter ini hanya berlaku saat COPY_WRITE_MODE disetel ke true.

      copy_write_direct_connect

      true untuk skenario yang mengizinkan koneksi langsung

      Tidak

      Parameter ini hanya berlaku saat COPY_WRITE_MODE disetel ke true. Jumlah data yang dapat ditulis dalam mode salinan ditentukan berdasarkan throughput titik akhir VPC. Sistem memeriksa apakah lingkungan dapat terhubung langsung ke node FE Hologres saat data ditulis dalam mode salinan. Koneksi langsung digunakan secara default jika lingkungan dapat terhubung langsung ke node FE Hologres. Jika parameter ini disetel ke false, koneksi langsung tidak digunakan.

      input_data_schema_ddl

      Tidak ada nilai default

      Parameter ini diperlukan untuk Spark 3.X. Konfigurasikan nilai parameter dalam format <your_DataFrame>.schema.toDDL.

      Pernyataan DDL untuk DataFrame di Spark.

      write_mode

      INSERT_OR_REPLACE

      Tidak

      Kebijakan yang digunakan untuk menangani konflik kunci utama. Parameter ini diperlukan jika tabel tujuan memiliki kunci utama. Nilai valid:

      • INSERT_OR_IGNORE: membuang data yang ingin Anda tulis jika terjadi konflik kunci utama.

      • INSERT_OR_UPDATE: memperbarui kolom relevan di tabel tujuan jika terjadi konflik kunci utama.

      • INSERT_OR_REPLACE: memperbarui semua kolom di tabel tujuan jika terjadi konflik kunci utama.

      write_batch_size

      512

      Tidak

      Jumlah maksimum permintaan yang diizinkan dalam satu batch dalam thread untuk menulis data. Jika jumlah total permintaan PUT mencapai batas atas yang ditentukan oleh parameter write_batch_size setelah konflik ditangani berdasarkan parameter write_mode, data dikirimkan dalam batch.

      write_batch_byte_size

      2 MB

      Tidak

      Jumlah maksimum byte yang diizinkan dalam satu batch dalam thread untuk menulis data. Jika jumlah total byte dari permintaan PUT mencapai batas atas yang ditentukan oleh parameter WRITE_BATCH_BYTE_SIZE setelah konflik ditangani berdasarkan parameter WRITE_MODE, data dikirimkan dalam batch.

      write_max_interval_ms

      10000 ms

      Tidak

      Interval pengiriman data dalam batch.

      write_fail_strategy

      TYR_ONE_BY_ONE

      Tidak

      Kebijakan yang digunakan untuk menangani kegagalan pengiriman. Jika batch tidak dapat dikirimkan, Holo Client mengirimkan entri data satu per satu dalam batch sesuai urutan tertentu. Jika entri data tidak dapat dikirimkan, Holo Client mengembalikan pesan kesalahan yang berisi informasi tentang entri data tersebut.

      write_thread_size

      1

      Tidak

      Jumlah thread paralel yang digunakan untuk menulis data. Setiap thread menempati satu koneksi.

      Jumlah total koneksi yang ditempati oleh pekerjaan Spark bervariasi berdasarkan paralelisme Spark. Jumlah total koneksi dapat dihitung menggunakan rumus berikut: Jumlah total koneksi = Nilai spark.default.parallelism × Nilai WRITE_THREAD_SIZE.

      dynamic_partition

      false

      Tidak

      Menentukan apakah akan membuat partisi secara otomatis jika data ditulis ke tabel induk yang tidak memiliki partisi. Nilai valid: true dan false. true: Partisi dibuat secara otomatis jika data ditulis ke tabel induk yang tidak memiliki partisi.

      retry_count

      3

      Tidak

      Jumlah maksimum percobaan ulang yang diizinkan untuk menulis dan mengkueri data jika terjadi kegagalan koneksi.

      retry_sleep_init_ms

      1000 ms

      Tidak

      Jumlah waktu yang dikonsumsi oleh percobaan ulang untuk permintaan dihitung menggunakan rumus berikut: retry_sleep_init_ms + retry_count × retry_sleep_step_ms.

      retry_sleep_step_ms

      10*1000 ms

      Tidak

      Jumlah waktu yang dikonsumsi oleh percobaan ulang untuk permintaan dihitung menggunakan rumus berikut: retry_sleep_init_ms + retry_count × retry_sleep_step_ms.

      connection_max_idle_ms

      60000 ms

      Tidak

      Periode timeout idle untuk koneksi yang digunakan untuk membaca dan menulis data. Jika koneksi tetap idle selama periode waktu lebih lama dari periode timeout idle yang ditentukan, Holo Client secara otomatis melepaskan koneksi.

      fixed_connection_mode

      false

      Tidak

      Menentukan apakah akan menggunakan koneksi tetap. Dalam mode salinan non-tetap, seperti mode INSERT, penulisan data dan kueri titik tidak menempati koneksi.

      Catatan

      Fitur koneksi tetap masih dalam versi beta dan hanya tersedia saat versi konektor adalah V1.2.0 atau lebih baru dan versi mesin Hologres adalah V1.3.0 atau lebih baru.

      scan_batch_size

      256

      Tidak

      Jumlah baris yang dipindai setiap kali saat Anda membaca data dari Hologres.

      scan_timeout_seconds

      60

      Tidak

      Periode timeout operasi pemindaian saat Anda membaca data dari Hologres. Unit: detik.

      scan_parallelism

      10

      Tidak

      Jumlah shard yang digunakan untuk membaca data dari Hologres. Nilai maksimumnya adalah jumlah shard tabel Hologres. Selama runtime pekerjaan, shard dialokasikan ke tugas Spark untuk pembacaan data.

Pemetaan tipe data

Tabel berikut menjelaskan pemetaan tipe data antara Spark dan Hologres.

Tipe data Spark

Tipe data Hologres

ShortType

SMALLINT

IntegerType

INT

LongType

BIGINT

StringType

TEXT, JSONB, dan JSON

DecimalType

NUMERIC(38, 18)

BooleanType

BOOL

DoubleType

DOUBLE PRECISION

FloatType

FLOAT

TimestampType

TIMESTAMPTZ

DateType

DATE

BinaryType

BYTEA dan ROARINGBITMAP

ArrayType(IntegerType)

int4[]

ArrayType(LongType)

int8[]

ArrayType(FloatType

float4[]

ArrayType(DoubleType)

float8[]

ArrayType(BooleanType)

boolean[]

ArrayType(StringType)

text[]