日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

遷移ClickHouse數據到StarRocks

本文為您介紹如何遷移EMR ClickHouse中的數據至EMR Serverless StarRocks實例。

前提條件

  • 已創建Serverless StarRocks實例,詳情請參見創建實例

  • 已在EMR on ECS上創建包含ClickHouse服務的OLAP集群,詳情請參見創建集群,或新建云數據庫ClickHouse集群,詳情請參見新建集群

    說明

    本文以在EMR on ECS上創建包含ClickHouse服務的集群(OLAP)為例。

使用限制

EMR Serverless StarRocks實例和OLAP集群需要在同一VPC下。

使用DataX同步數據

DataX介紹

DataX是阿里巴巴集團內被廣泛使用的離線數據同步工具,實現了包括MySQL、Oracle、OceanBase、SqlServer、PostgreSQL、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS等各種異構數據源之間高效的數據同步功能。DataX詳細信息,請參見DataX

適用場景

適用于熟悉DataX、遷移批量數據的場景,可以一次遷移大批量數據至EMR StarRocks Serverless。

操作步驟

  1. 下載并解壓縮DataX安裝包

    DataX的具體使用方式請參見DataX

  2. 配置RDBMSReader。

    說明

    RDBMSReader是DataX內置的一個通用的關系數據庫讀插件,可以通過添加、注冊數據庫驅動等方式增加各種關系型數據庫的讀支持。

    1. 復制datax/plugin/writer/clickhousewriter/libs目錄下的所有JAR包到datax/plugin/reader/rdbmsreader/libs目錄下。

      cp datax/plugin/writer/clickhousewriter/libs/* datax/plugin/reader/rdbmsreader/libs
  3. 刪除datax/plugin/reader/rdbmsreader/libs目錄下的guava-r05.jar。

  4. 修改datax/plugin/reader/rdbmsreader下的plugin.json文件,給drivers的參數值添加上,"ru.yandex.clickhouse.ClickHouseDriver"

    {
      "name": "rdbmsreader",
      "class": "com.alibaba.datax.plugin.reader.rdbmsreader.RdbmsReader",
      "description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
      "developer": "alibaba",
      "drivers":["dm.jdbc.driver.DmDriver", "com.sybase.jdbc3.jdbc.SybDriver", "com.edb.Driver","ru.yandex.clickhouse.ClickHouseDriver"]
    }
  5. 配置StarRocks Writer。

    StarRocks Writer的配置方式,請參見DataX Writer

  6. 配置DataX的JSON腳本。

    為導入作業新建一個JSON格式的文件ck2strs.json

    {
      "job": {
        "setting": {
          "speed": {
            "channel": 3
          },
          "errorLimit": {
            "record": 0,
            "percentage": 0
          }
        },
        "content": [
          {
            "reader": {
              "name": "rdbmsreader",
              "parameter": {
                "username": "default",
                "password": "**",
                "column": ["**"],
                "connection": [
                  {"jdbcUrl": ["jdbc:clickhouse://<clickhouse_host>:8123/default"],
                    "table": ["**"]
                  } ],
                "where": ""
              }
            },
            "writer": {
              "name": "starrockswriter",
              "parameter": {
                "username": "admin",
                "password": "**",
                "database": "ck",
                "table": "uk_price_paid_sr",
                "column": ["**"],
                "preSql": [],
                "postSql": [],
                "jdbcUrl": "jdbc:mysql://<fe_host>:<fe_query_port>",
                "loadUrl": [
                  "<fe_host>:<fe_http_port>",
                  "<fe_host>:<fe_http_port>",
                  "<fe_host>:<fe_http_port>"
                ],
                "loadProps": {
                  "column_separator": "\\x03",
                  "row_delimiter": "\\x02"
                }
              }
            }
          }
        ]
      }
    }
    

    各參數含義如下表所示。

    • reader

      參數

      說明

      username

      ClickHouse用戶名。本文使用的是ClickHouse部署完后的默認用戶default,密碼默認值為空。如果需要更換用戶,請根據您的實際情況修改并設置相應的密碼。

      password

      ClickHouse用戶的密碼。默認用戶default對應的密碼為空。

      column

      可以指定需要查詢的列。

      jdbcUrl

      JDBC連接串。填寫格式為jdbc:clickhouse://<clickhouse_host>:<clickhouse_port>/<database_name>

      格式中各參數如下:

      • <clickhouse_host>:ClickHouse的IP地址。

      • <clickhouse_port>:官方驅動的端口默認為8123。如果使用TCP協議的第三方驅動,則默認端口為9000。

      • <database_name>:ClickHouse的數據庫名。

      table

      ClickHouse的表名稱。

    • writer

      參數

      說明

      username

      StarRocks的管理員用戶,默認為admin。

      password

      admin的密碼。

      database

      StarRocks數據庫的名稱。

      table

      StarRocks表的名稱。

      column

      可以指定需要查詢的列。多個字段時之間用英文逗號(,)分隔。例如,"column": ["id","name","age"]

      重要

      該參數必須指定。如果希望導入所有字段,可以使用["*"]

      preSql

      寫入數據到目的表前,會先執行設置的標準語句。

      postSql

      寫入數據到目的表后,會先執行設置的標準語句。

      jdbcUrl

      JDBC連接信息,用于執行preSqlpostSql。填寫格式為jdbc:mysql://<fe_host>:<fe_query_port>

      loadUrl

      StarRocks FE的地址,填寫格式為<fe_host>:<fe_http_port>

  7. 執行同步任務。

    python datax/bin/datax.py --jvm="-Xms1G -Xmx1G" -p"-Dstart=$i -Dend=$end" datax/job/ck2strs.json>>/bigdata/log/ck2strs/${i}.log
    說明
    • 示例代碼中的Xms和Xmx ,通常建議將內存設置為4G或者8G,可根據任務機的實際配置,提升-Xms與-Xmx,來防止OOM。

    • 調整JVM Xms和Xmx參數的兩種方式:一種是直接更改datax.py;另一種是在啟動的時候,加上對應的參數,例如python datax/bin/datax.py --jvm="-Xms8G -Xmx8G"XXX.json

使用StarRocks外部表同步數據

方案介紹

該方案是通過StarRocks的外部表,將源集群數據同步至目標集群;通過JDBC方式,在目標集群創建目標表,在源集群創建外部表,將數據插入外部表實現數據遷移。

適用場景

適用于單表數據遷移的場景。如果表數量大,則操作會比較繁瑣,耗時較高。

操作步驟

  1. 創建JDBC資源。

    create external resource ck_jdbc
    properties (
        "type"="jdbc",
        "user"="default",
        "password"="****",
        "jdbc_uri"="jdbc:clickhouse://172.16.**.**:8123/test",
        "driver_url"="https://****.oss-cn-****-internal.aliyuncs.com/clickhouse-jdbc-0.3.2-all.jar",
        "driver_class"="com.clickhouse.jdbc.ClickHouseDriver"
    );

    相關參數如下表所示。

    參數

    說明

    ck_jdbc

    JDBC資源的名稱。您可以自定義。

    type

    資源類型。固定值為jdbc。

    user

    ClickHouse用戶名。本文使用的是ClickHouse部署完后的默認用戶default,密碼默認值為空。如果需要更換用戶,請根據您的實際情況修改并設置相應的密碼。

    password

    ClickHouse用戶的密碼。默認用戶default對應的密碼為空。

    jdbc_uri

    填寫格式為jdbc:clickhouse://<clickhouse_host>:<clickhouse_port>/<database_name>

    格式中各參數如下:

    • <clickhouse_host>:ClickHouse的IP地址。

    • <clickhouse_port>:官方驅動的端口默認為8123。如果使用TCP協議的第三方驅動,則默認端口為9000。

    • <database_name>:ClickHouse的數據庫名。

    driver_url

    OSS上存放驅動的內網地址。

    本示例使用的是官方驅動,下載clickhouse-jdbc-0.3.2-all.jar,然后上傳至OSS。

    driver_class

    驅動類,默認為com.clickhouse.jdbc.ClickHouseDriver。

    創建完JDBC資源后,您還可以進行以下操作:

    • 查看JDBC資源

      -- 查看所有JDBC資源。
      -- 說明:ResourceType列為jdbc。
      SHOW RESOURCES;
    • 刪除JDBC資源

      DROP RESOURCE "ck_jdbc";
      說明

      刪除JDBC資源會導致使用該JDBC資源創建的JDBC外部表不可用,但目標數據庫的數據并不會丟失。刪除JDBC資源后,如果您仍需通過StarRocks查詢目標數據庫的數據,可以重新創建JDBC資源和JDBC外部表。

  2. 創建JDBC外部表。

    -- 創建外部表。
    create external table uk_price_paid_ex (
        price BIGINT(20) NULL COMMENT "",
        date String NULL COMMENT "",
        postcode1 String NULL COMMENT "",
        postcode2 String NULL COMMENT "",
        type String NULL COMMENT "",
        is_new BIGINT(20) NULL COMMENT "",
        duration String NULL COMMENT "",
        addr1 String NULL COMMENT "",
        addr2 String NULL COMMENT "",
        street String NULL COMMENT "",
        locality String NULL COMMENT "",
        town String NULL COMMENT "" ,
        district String NULL COMMENT "",
        county String NULL COMMENT "" 
    ) ENGINE=jdbc 
    properties (
        "resource"="ck_jdbc",
        "table"="uk_price_paid",
        "compression"="ZSTD"
    );
    說明
    • 不支持索引。

    • 不支持通過PARTITION BY、DISTRIBUTED BY來指定數據分布規則。

  3. 創建數據表。

    適用于所有數據模型。

    create table uk_price_paid (
        price BIGINT(20) NULL COMMENT "",
        date DATE NULL COMMENT "",
        postcode1 String NULL COMMENT "",
        postcode2 String NULL COMMENT "",
        type String NULL COMMENT "",
        is_new BIGINT(20) NULL COMMENT "",
        duration String NULL COMMENT "",
        addr1 String NULL COMMENT "",
        addr2 String NULL COMMENT "",
        street String NULL COMMENT "",
        locality String NULL COMMENT "",
        town String NULL COMMENT "" ,
        district String NULL COMMENT "",
        county String NULL COMMENT "" 
    ) ENGINE=OLAP
    duplicate key (price)
    distributed by hash(date) buckets 32
    properties(
        "replication_num"="1"
    );
  4. 插入數據。

    insert into uk_price_paid select * from uk_price_paid_ex;

常見問題

  • 問題報錯

    ERROR 1064 (HY000): Type is not supported on column[date1], JDBC result type is [java.time.LocalDate]

    操作詳情如下圖所示。

    image..png
  • 解決方式

    該問題主要是ClickHouse和StarRocks的date字段類型不匹配導致的。您可以先修改ClickHouse表中的date字段類型為String或其他類型,然后設置StarRocks目標表為DATE類型,最后數據插入StarRocks目標表時會自動轉換類型。