本文是關於VVR 8.0.x及以下版本的With參數說明。
WITH參數
通用
參數 | 說明 | 資料類型 | 是否必填 | 預設值 | 備忘 |
connector | 表類型。 | String | 是 | 無 | 固定值為 |
dbname | 資料庫名稱。 | String | 是 | 無 | Hologres V2.0版本推出了全新的彈性高可用執行個體形態,將計算資源分解為不同的計算群組(Virtual Warehouse),更好的服務於高可用部署。不同的計算群組使用相同的Endpoint,您可以通過在dbname參數後添加特定的尾碼來指定串連某個計算群組。例如某張維表希望串連特定的計算群組read_warehouse,可以通過 說明 僅JDBC相關模式支援使用計算群組,詳見源表、維表和結果表WITH參數中的sdkMode參數。 |
tablename | 表名稱。 | String | 是 | 無 | 如果Schema不為Public時,則tablename需要填寫為 |
username |
| String | 是 | 無 |
重要 為了避免您的AK資訊泄露,建議您使用變數的方式填寫AccessKey取值,詳情請參見專案變數。 |
password |
| String | 是 | 無 | |
endpoint | Hologres服務地址。 | String | 是 | 無 | 詳情請參見訪問網域名稱。 |
connection.ssl.mode | 是否啟用SSL(Secure Sockets Layer)傳輸加密,以及啟用採用何種模式。 | String | 否 | disable |
說明
|
connection.ssl.root-cert.location | 當傳輸加密模式需要認證時,配置認證的路徑。 | String | 否 | 無 | 當connection.ssl.mode配置為verify-ca或者verify-full時,需要同時配置CA認證的路徑。認證可以使用Realtime Compute控制台的檔案管理功能上傳至平台,上傳後檔案存放在/flink/usrlib目錄下。例如,需要使用的CA認證檔案名稱為certificate.crt,則上傳後參數取值應該為 說明
|
jdbcRetryCount | 當串連故障時,寫入和查詢的重試次數。 | Integer | 否 | 10 | 無。 |
jdbcRetrySleepInitMs | 每次重試的固定等待時間。 | Long | 否 | 1000 | 實際重試的等待時間的計算公式為 |
jdbcRetrySleepStepMs | 每次重試的累加等待時間。 | Long | 否 | 5000 | 實際重試的等待時間的計算公式為 |
jdbcConnectionMaxIdleMs | JDBC串連的空閑時間。 | Long | 否 | 60000 | 超過這個空閑時間,串連就會斷開釋放掉。單位為毫秒。 |
jdbcMetaCacheTTL | 本機快取TableSchema資訊的到期時間。 | Long | 否 | 60000 | 單位為毫秒。 |
jdbcMetaAutoRefreshFactor | 如果緩衝的剩餘時間小於觸發時間,則系統會自動重新整理緩衝。 | Integer | 否 | 4 | 緩衝的剩餘時間計算方法:緩衝的剩餘時間=緩衝的到期時間 - 緩衝已經存活的時間。緩衝自動重新整理後,則從0開始重新計算緩衝的存活時間。 觸發時間計算方法:jdbcMetaCacheTTL/jdbcMetaAutoRefreshFactor兩個參數的比值。 |
type-mapping.timestamp-converting.legacy | Flink和Hologres之間是否進行時間類型的相互轉換。 | Boolean | 否 | true |
說明
|
property-version | Connector參數版本。 | Integer | 否 | 0 | 可填的值為0和1,預設值為0。 說明
|
源表專屬
參數 | 說明 | 資料類型 | 是否必填 | 預設值 | 備忘 |
field_delimiter | 匯出資料時,不同行之間使用的分隔字元。 | String | 否 | "\u0002" | 無。 |
binlog | 是否消費Binlog資料。 | Boolean | 否 | false |
說明
|
sdkMode | SDK模式。 | String | 否 | holohub |
各版本推薦取值詳情請參見注意事項。 |
jdbcBinlogSlotName | JDBC模式的binlog源表的Slot名稱。 | String | 否 | 無 | 僅在sdkMode配置為jdbc時生效,如果使用者未配置,連接器會預設建立一個Slot來使用。詳見JDBC模式Binlog源表。 說明 Hologres執行個體2.1版本起且使用VVR 8.0.5版本及以上,不再需要配置此參數,連接器也不會嘗試自動建立。 |
binlogMaxRetryTimes | 讀取Binlog資料出錯後的重試次數。 | Integer | 否 | 60 | 無。 |
binlogRetryIntervalMs | 讀取Binlog資料出錯後的重試時間間隔。 | Long | 否 | 2000 | 單位為毫秒。 |
binlogBatchReadSize | 批量讀取Binlog的資料行數。 | Integer | 否 | 100 | 無。 |
cdcMode | 是否採用CDC模式讀取Binlog資料。 | Boolean | 否 | false |
說明
|
upsertSource | 源表是否使用upsert類型的Changelog。 | Boolean | 否 | false | 僅在CDC模式下生效。
說明 如果下遊包含回撤運算元(例如使用ROW_NUMBER OVER WINDOW去重),則需要設定upsertSource為true,此時源表會以Upsert方式從Hologres中讀取資料。 |
binlogStartupMode | Binlog資料消費模式。 | String | 否 | earliestOffset |
說明 如果設定了startTime或者在啟動介面選擇了啟動時間,則binlogStartupMode強制使用timestamp模式,其他消費模式不生效,即startTime參數優先順序更高。 說明
|
startTime | 啟動位點的時間。 | String | 否 | 無 | 格式為yyyy-MM-dd hh:mm:ss。如果沒有設定該參數,且作業沒有從State恢複,則從最早的Binlog開始消費Hologres資料。 |
jdbcScanFetchSize | 掃描時攢批大小。 | Integer | 否 | 256 | 無。 |
jdbcScanTimeoutSeconds | 掃描操作逾時時間。 | Integer | 否 | 60 | 單位為秒。 |
jdbcScanTransactionSessionTimeoutSeconds | 掃描操作所在事務的逾時時間。 | Integer | 否 | 600秒(0表示不逾時) | 對應Hologres的GUC參數idle_in_transaction_session_timeout,詳情請參見GUC參數。 |
enable_filter_push_down | 全量讀取階段是否進行filter下推。 | Boolean | 否 | false |
|
partition-binlog.mode | 消費分區表Binlog模式。 | Enum | 否 | DISABLE |
|
partition-binlog-lateness-timeout-minutes | 在DYNAMIC模式下消費分區表,允許延遲的最大逾時時間。 | Boolean | 否 | 60 |
|
partition-values-to-read | 在STATIC模式下消費分區表,指定所需消費的分區,分區值之間使用','進行分隔。 | String | 否 | 無 |
|
結果表專屬
參數 | 說明 | 資料類型 | 是否必填 | 預設值 | 備忘 |
sdkMode | SDK模式。 | String | 否 | jdbc |
各版本推薦取值詳情請參見注意事項。 |
bulkload | 是否採用bulkload寫入。 | Boolean | 否 | false | 僅在sdkMode設定為jdbc_copy時生效。bulkload寫入目前僅適用於無主鍵表或者主鍵保證不重複的有主鍵表(主鍵重複會拋出異常),相比預設的jdbc_copy,寫入使用更少的Hologres資源。 說明 僅Realtime Compute引擎VVR 8.0.5及以上版本且Hologres執行個體為2.1及以上版本支援該參數。 |
useRpcMode | 是否通過RPC方式使用Hologres連接器。 | Boolean | 否 | false |
說明
|
mutatetype | 資料寫入模式。 | String | 否 | insertorignore |
說明
|
partitionrouter | 是否寫入分區表。 | Boolean | 否 | false | 無。 |
createparttable | 當寫入分區表時,是否根據分區值自動建立不存在的分區表。 | Boolean | 否 | false | RPC模式下,如果分區值中存在短劃線(-),暫不支援自動建立分區表。 說明
|
ignoredelete | 是否忽略撤回訊息。 | Boolean | 否 | true | 說明
|
sink.delete-strategy | 撤回訊息的處理策略。 | String | 否 | 無 |
說明
|
connectionSize | 單個Flink結果表任務所建立的JDBC串連池大小。 | Integer | 否 | 3 | 如果作業效能不足,建議您增加串連池大小。串連池大小和資料吞吐成正比。 |
jdbcWriteBatchSize | JDBC模式,Hologres Sink節點資料攢批條數(不是來一條資料處理一條,而是攢一批再處理)的最大值。 | Integer | 否 | 256 | 單位為資料行數。 說明 jdbcWriteBatchSize、jdbcWriteBatchByteSize和jdbcWriteFlushInterval三者之間為或的關係。如果同時設定了這三個參數,則滿足其中一個,就進行寫入結果資料。 |
jdbcWriteBatchByteSize | JDBC模式,Hologres Sink節點資料攢批位元組數(不是來一條資料處理一條,而是攢一批再處理)的最大值。 | Long | 否 | 2*1024*1024位元組,即2 MB | 說明 jdbcWriteBatchSize、jdbcWriteBatchByteSize和jdbcWriteFlushInterval三者之間為或的關係。如果同時設定了這三個參數,則滿足其中一個,就進行寫入結果資料。 |
jdbcWriteFlushInterval | JDBC模式,Hologres Sink節點資料攢批寫入Hologres的最長等待時間。 | Long | 否 | 10000 | 單位為毫秒。 說明 jdbcWriteBatchSize、jdbcWriteBatchByteSize和jdbcWriteFlushInterval三者之間為或的關係。如果同時設定了這三個參數,則滿足其中一個,就進行寫入結果資料。 |
ignoreNullWhenUpdate | 當mutatetype='insertOrUpdate'時,是否忽略更新寫入資料中的Null值。 | Boolean | 否 | false |
說明 當sdk_mode設定為jdbc_copy時,不支援此參數。 |
connectionPoolName | 串連池名稱。同一個TaskManager中,配置相同名稱的串連池的表可以共用串連池。 | String | 否 | 無 | 取值為非 說明
|
jdbcEnableDefaultForNotNullColumn | 如果將Null值寫入Hologres表中Not Null且無預設值的欄位,是否允許連接器協助填充一個預設值。 | Boolean | 否 | true |
|
remove-u0000-in-text.enabled | 如果寫入時字串類型包含\u0000非法字元,是否允許連接器協助去除。 | Boolean | 否 | false |
重要
|
partial-insert.enabled | 是否只插入INSERT語句中定義的欄位。 | Boolean | 否 | false |
說明 此參數僅在mutatetype參數配置為InsertOrUpdate時生效。 |
deduplication.enabled | jdbc及jdbc_fixed模式寫入攢批過程中,是否進行去重。 | Boolean | 否 | true |
說明
|
check-and-put.column | 啟用條件更新能力,並指定檢查的欄位名。 | String | 否 | 無 | 參數取值必須設定為Hologres表存在的欄位名。 重要
|
check-and-put.operator | 條件更新操作的比較操作符。 | String | 否 | GREATER | 比較新record的check欄位與表中舊值,符合條件判斷操作符時進行更新。目前支援配置為GREATER、GREATER_OR_EQUAL、EQUAL、NOT_EQUAL、LESS、LESS_OR_EQUAL、IS_NULL、IS_NOT_NULL。 說明 僅Realtime Compute引擎VVR 8.0.11及以上版本支援該參數。 |
check-and-put.null-as | 當條件更新時,如果舊資料為null,則將該null值視為此參數配置的有效值。 | String | 否 | 無 | 由於在PostgreSQL中,任何值與NULL進行比較的結果均為FALSE,因此當表中的原有資料為NULL時,進行更新操作時需要設定一個NULL-AS作為參數,相當於SQL中的COALESCE函數。 說明 僅Realtime Compute引擎VVR 8.0.11及以上版本支援該參數。 |
aggressive.enabled | 是否啟用激進提交模式。 | Boolean | 否 | false | 設定為true時,即便攢批未達到預期條數,串連在空閑時將會被強制提交。在流量較小時,可以有效減少資料寫入的延時。 說明
|
維表專屬
參數 | 說明 | 資料類型 | 是否必填 | 預設值 | 備忘 |
sdkMode | SDK模式。 | String | 否 | jdbc |
各版本推薦取值詳情請參見注意事項。 |
useRpcMode | 是否通過RPC方式使用Hologres連接器。 | Boolean | 否 | false | 參數取值如下:
說明 該參數取值為true時與sdkMode=rpc同效,推薦操作詳情請參見注意事項。 |
connectionSize | 單個Flink維表任務所建立的JDBC串連池大小。 | Integer | 否 | 3 | 如果作業效能不足,建議您增加串連池大小。串連池大小和資料吞吐成正比。 |
connectionPoolName | 串連池名稱。同一個TaskManager中,配置相同名稱的串連池的表可以共用串連池。 | String | 否 | 無 | 取值為非 說明
|
jdbcReadBatchSize | 點查Hologres維表時,攢批處理的最大條數。 | Integer | 否 | 128 | 無。 |
jdbcReadBatchQueueSize | 維表點查請求緩衝隊列大小。 | Integer | 否 | 256 | 無。 |
jdbcReadTimeoutMs | 維表點查的逾時時間。 | Long | 否 | 預設值為0,表示不會逾時 | 無。 |
jdbcReadRetryCount | 維表點查逾時時的重試次數。 | Integer | 否 | 見備忘列。 | 本參數與jdbcRetryCount不同,後者是指串連發生異常時的重試次數。 說明 預設值:
|
jdbcScanFetchSize | 在一對多join(即沒有使用完整主鍵)時使用scan介面,scan攢批處理資料的條數。 | Integer | 否 | 256 | 無。 |
jdbcScanTimeoutSeconds | scan操作的逾時時間。 | Integer | 否 | 60 | 單位為秒。 |
cache | 緩衝策略。 | String | 否 | None | Hologres僅支援None和LRU兩種緩衝策略。 |
cacheSize | 緩衝大小。 | Integer | 否 | 10000 | 選擇LRU緩衝策略後,可以設定緩衝大小。單位為條。 |
cacheTTLMs | 緩衝更新時間間隔。 | Long | 否 | 見備忘列。 | 單位為毫秒。cacheTTLMs預設值和cache的配置有關:
|
cacheEmpty | 是否緩衝join結果為空白的資料。 | Boolean | 否 | true |
|
async | 是否非同步返回資料。 | Boolean | 否 | false |
說明 非同步返回資料是無序的。 |
Flink與Hologres時區說明
時間類型
產品 | 類型 | 說明 |
Flink | 表示沒有時區資訊的日期和時間,描述年、 月、日、小時、分鐘、秒和小數秒對應的時間戳記。可以通過一個字串來指定,例如 | |
用於描述時間軸上的絕對時間點,使用long儲存從epoch至今的毫秒數,使用int儲存毫秒中的納秒數。epoch時間是從Java的標準epoch時間開始計算。在計算和可視化時, 每個TIMESTAMP_LTZ類型的資料都使用Session (會話)中配置的時區。可以用於跨時區的計算,因為它是一個基於epoch的絕對時間點,代表的就是不同時區的同一個絕對時間點。 相同的TIMESTAMP_LTZ值,在不同的時區可能會反映出不同的本地TIMESTAMP,例如:如果一個TIMESTAMP_LTZ值為 | ||
Hologres | TIMESTAMP | 類似於Flink的 |
TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ) | 類似於Flink的 例如北京(UTC+8)時區的時間戳記 |
時間類型映射
Realtime Compute引擎VVR 8.0.6及以上版本且
type-mapping.timestamp-converting.legacy=false時,支援所有即時數倉Hologres間的相互轉換。Flink
Hologres
詳情
TIMESTAMP
TIMESTAMP
之間相互轉換是直接的,不涉及時區轉換。因此推薦採用該資料對應。
TIMESTAMP LTZ
TIMESTAMPTZ
TIMESTAMP
TIMESTAMPTZ
之間的轉換涉及時區轉換。為了在轉換中保持準確性,需要通過配置項參數
table.local-time-zone設定Flink時區,配置項參數設定方法請參見如何配置自訂的作業運行參數?。例如當設定
'table.local-time-zone': 'Asia/Shanghai'時,表示Flink時區為上海(+8時區)時,Flink TIMESTAMP類型的資料為2022-01-01 01:01:01.123456,寫入Hologres TIMESTAMP TZ的數值為2022-01-01 01:01:01.123456+8。TIMESTAMP LTZ
TIMESTAMP
Realtime Compute引擎VVR8.0.6及以上版本且
type-mapping.timestamp-converting.legacy=true時或者VVR 8.0.5及以下版本,除TIMESTAMP間轉化,其他類型相互轉化可能會出現資料偏差問題。Flink
Hologres
備忘
TIMESTAMP
TIMESTAMP
之間相互轉換是直接的,不涉及時區轉換。因此推薦採用該資料對應。
TIMESTAMP LTZ
TIMESTAMPTZ
讀寫Hologres資料時都當作無時區時間進行處理,可能會存在資料偏差。
例如,Flink TIMESTAMP_LTZ類型的數值為2024-03-19T04:00:00Z,在上海(+8時區)對應的實際無時區時間為2024-03-19T12:00:00,但是寫入時將2024-03-19T04:00:00當作無時區時間,寫入Hologres TIMESTAMPTZ的數值為2024-03-19T04:00:00+08,數值偏差8小時。
TIMESTAMP
TIMESTAMPTZ
時區轉換預設採用的是運行環境的JVM時區,而不是Flink時區,這與Flink內部計算的時區轉換格式不同。當Flink時區與機器的JVM時區不一致時,會導致資料存在偏差,建議採用Flink時區進行Hologres資料的讀寫。
TIMESTAMP LTZ
TIMESTAMP