参数配置(VVR 8及以下版本)

本文是关于VVR 8.0.x及以下版本的With参数说明。

WITH参数

通用

参数

说明

数据类型

是否必填

默认值

备注

connector

表类型。

String

固定值为hologres

dbname

数据库名称。

String

Hologres V2.0版本推出了全新的弹性高可用实例形态,将计算资源分解为不同的计算组(Virtual Warehouse),更好的服务于高可用部署,详情请参见计算组实例快速入门。不同的计算组使用相同的Endpoint,您可以通过在dbname参数后添加特定的后缀来指定连接某个计算组。例如某张维表希望连接特定的计算组read_warehouse,可以通过'dbname' = 'db_test@read_warehouse' 方式指定,详情请参见连接计算组

说明

JDBC相关模式支持使用计算组,详见源表、维表和结果表WITH参数中的sdkMode参数。

tablename

表名称。

String

如果Schema不为Public时,则tablename需要填写为schema.tableName

username

  • 自定义账号的用户名,格式为BASIC$<user_name>

  • 阿里云账号或RAM用户的AccessKey ID。

String

重要

为了避免您的AK信息泄露,建议您使用变量的方式填写AccessKey取值,详情请参见项目变量

password

  • 自定义账号的密码。

  • 阿里云账号或RAM用户的AccessKey Secret。

String

endpoint

Hologres服务地址。

String

详情请参见访问域名

connection.ssl.mode

是否启用SSL(Secure Sockets Layer)传输加密,以及启用采用何种模式。

String

disable

  • disable(默认值):不启用传输加密。

  • require:启用SSL,只对数据链路加密。

  • verify-ca:启用SSL,加密数据链路,同时使用CA证书验证Hologres服务端的真实性。

  • verify-full:启用SSL,加密数据链路,使用CA证书验证Hologres服务端的真实性,同时比对证书内的CNDNS与连接时配置的Hologres连接地址是否一致。

说明
  • VVR 8.0.5及以上版本开始支持此参数。

  • Hologres2.1版本起新增支持verify-caverify-full模式。详见传输加密

  • 当配置为verify-ca或者verify-full时,需要同时配置connection.ssl.root-cert.location参数。

connection.ssl.root-cert.location

当传输加密模式需要证书时,配置证书的路径。

String

connection.ssl.mode配置为verify-ca或者verify-full时,需要同时配置CA证书的路径。证书可以使用实时计算控制台的文件管理功能上传至平台,上传后文件存放在/flink/usrlib目录下。例如,需要使用的CA证书文件名为certificate.crt,则上传后参数取值应该为 '/flink/usrlib/certificate.crt'

说明

jdbcRetryCount

当连接故障时,写入和查询的重试次数。

Integer

10

无。

jdbcRetrySleepInitMs

每次重试的固定等待时间。

Long

1000

实际重试的等待时间的计算公式为jdbcRetrySleepInitMs+retry*jdbcRetrySleepStepMs。单位为毫秒。

jdbcRetrySleepStepMs

每次重试的累加等待时间。

Long

5000

实际重试的等待时间的计算公式为jdbcRetrySleepInitMs+retry*jdbcRetrySleepStepMs。单位为毫秒。

jdbcConnectionMaxIdleMs

JDBC连接的空闲时间。

Long

60000

超过这个空闲时间,连接就会断开释放掉。单位为毫秒。

jdbcMetaCacheTTL

本地缓存TableSchema信息的过期时间。

Long

60000

单位为毫秒。

jdbcMetaAutoRefreshFactor

如果缓存的剩余时间小于触发时间,则系统会自动刷新缓存。

Integer

4

缓存的剩余时间计算方法:缓存的剩余时间=缓存的过期时间 - 缓存已经存活的时间。缓存自动刷新后,则从0开始重新计算缓存的存活时间。

触发时间计算方法:jdbcMetaCacheTTL/jdbcMetaAutoRefreshFactor两个参数的比值。

type-mapping.timestamp-converting.legacy

FlinkHologres之间是否进行时间类型的相互转换。

Boolean

true

  • true:不进行相互转换。时区转换将采用运行环境中的JVM时区。

  • false(推荐):进行相互转换。时区转换将使用Flink所配置的时区。

说明
  • 仅实时计算引擎VVR 8.0.6及以上版本支持该参数。

  • FlinkHologres的时区详情,请参见FlinkHologres时区说明

  • property-version=0时,默认值为true;property-version=1时,默认值为false。

property-version

Connector参数版本。

Integer

0

可填的值为01,默认值为0。

说明
  • VVR 8.0.6及以上版本支持配置该参数。

  • 在不同参数版本里,可用的参数集合和参数的默认值可能不同。如果存在区别,区别详情会在参数的说明部分描述。

  • 推荐使用参数版本1。

源表独有

参数

说明

数据类型

是否必填

默认值

备注

field_delimiter

导出数据时,不同行之间使用的分隔符。

String

"\u0002"

无。

binlog

是否消费Binlog数据。

Boolean

false

  • true:消费Binlog数据。

  • false(默认值):不消费Binlog数据。

说明
  • property-version=0时,默认值为false。

  • property-version=1时,默认值为true。

sdkMode

SDK模式。

String

holohub

  • holohub(默认值):使用holohub模式消费binlog。

  • jdbc:使用jdbc模式消费binlog。

  • jdbc_fixed: 使用fixed jdbc模式消费binlog,与jdbc模式的区别在于不受连接数限制。目前此模式暂不支持消费开启数据脱敏功能的databasebinlog,详情请参见数据脱敏

各版本推荐取值详情请参见注意事项

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

  • true:CDC模式读取Binlog数据。

  • false(默认值):非CDC模式读取Binlog数据。

说明
  • property-version=0时,默认值为false。

  • property-version=1时,默认值为true。

upsertSource

源表是否使用upsert类型的Changelog。

Boolean

false

仅在CDC模式下生效。

  • true:仅支持Upsert类型,包括INSERT、DELETEUPDATE_AFTER。

  • false(默认值):支持所有类型,包括INSERT、DELETE、UPDATE_BEFOREUPDATE_AFTER。

说明

如果下游包含回撤算子(例如使用ROW_NUMBER OVER WINDOW去重),则需要设置upsertSourcetrue,此时源表会以Upsert方式从Hologres中读取数据。

binlogStartupMode

Binlog数据消费模式。

String

earliestOffset

  • initial:先全量消费数据,再读取Binlog开始增量消费。

  • earliestOffset(默认值):从最早的Binlog开始消费。

  • timestamp:从设置的startTime开始消费Binlog。

说明

如果设置了startTime或者在启动界面选择了启动时间,则binlogStartupMode强制使用timestamp模式,其他消费模式不生效,即startTime参数优先级更高。

说明
  • property-version=0时,默认值为false。

  • property-version=1时,默认值为true。

startTime

启动位点的时间。

String

格式为yyyy-MM-dd hh:mm:ss。如果没有设置该参数,且作业没有从State恢复,则从最早的Binlog开始消费Hologres数据。

jdbcScanFetchSize

扫描时攒批大小。

Integer

256

无。

jdbcScanTimeoutSeconds

扫描操作超时时间。

Integer

60

单位为秒。

jdbcScanTransactionSessionTimeoutSeconds

扫描操作所在事务的超时时间。

Integer

600秒(0表示不超时)

对应HologresGUC参数idle_in_transaction_session_timeout,详情请参见GUC参数

enable_filter_push_down

全量读取阶段是否进行filter下推。

Boolean

false

  • false(默认值):不进行filter下推。

  • true:读取全量数据时,将支持的过滤条件下推到Hologres执行。包括非Binlog Source全量读取以及Binlog Source使用全增量一体化消费模式时的全量阶段。

    重要

    建议使用VVR 6.0.7及以上版本,在源表增加此参数来开启过滤条件下推功能,提高整体性能。

partition-binlog.mode

消费分区表Binlog模式。

Enum

DISABLE

  • DISABLE(默认值):源表是非分区表,如果指定的Hologres表为分区表,将抛出异常。

  • DYNAMIC:持续消费分区表的最新分区。分区表必须开启动态分区管理,DYNAMIC模式会按照从旧到新的顺序消费各个分区。当消费到次新分区时,会在新的单位时间到来时,开启最新分区的消费。

  • STATIC:消费分区表的固定分区,可同时消费多个分区。分区在消费过程中无法新增或移除。默认消费此父表的所有分区。

partition-binlog-lateness-timeout-minutes

DYNAMIC模式下消费分区表,允许延迟的最大超时时间。

Boolean

60

  • 单位为分钟,DYNAMIC模式会在新的单位时间到来时开启当前时间对应的最新分区的消费,但不会立刻关闭前一个分区,而是会持续监听以保证可以读取到上一个分区的延迟数据。

    例如:如果动态分区以DAY为单位,分区是20240920,允许数据最大延迟是1小时,对于这个分区,其消费会在2024-09-21 01:00:00关闭,而不是在2024-09-21 00:00:00停止消费。

  • lateness-timeout时间不允许超过分区的单位时间。

    如果按天分区,其最大值为24 * 60 = 1440(min),DYNAMIC模式大多数时间只会同时消费一张表,在延迟时间内可能同时消费两个分区。

partition-values-to-read

STATIC模式下消费分区表,指定所需消费的分区,分区值之间使用','进行分隔。

String

  • 不配置此参数时,STATIC模式会消费指定父表的所有分区,指定时则仅消费被指定的分区。

  • 此参数仅需要填写分区值,不需要完整的分区名称,多个分区值使用,分割。目前不支持通过正则表达式配置。

结果表独有

参数

说明

数据类型

是否必填

默认值

备注

sdkMode

SDK模式。

String

jdbc

  • jdbc:默认值,表示使用jdbc模式进行写入。

  • jdbc_copy:是否使用fixed copy方式写入。

    fixed copy是一种高性能的流式写入方式,适用于对吞吐和延迟要求高的场景。但此模式暂不支持delete数据,也不支持写入分区父表,不支持ignoreNullWhenUpdate参数。

  • rpc:表示使用rpc模式进行写入。不支持写入HologresJSONB、RoarinBitmap类型。

  • jdbc_fixed(beta功能):表示使用fixed jdbc方式进行写入,

    jdbc模式的区别在于不占用连接数,不支持写入HologresJSONB,RoarinBitmap类型。目前此模式暂不支持写入开启数据脱敏功能的database,详情请参见数据脱敏

各版本推荐取值详情请参见注意事项

bulkload

是否采用bulkload写入。

Boolean

false

仅在sdkMode设置为jdbc_copy时生效。bulkload写入目前仅适用于无主键表或者主键保证不重复的有主键表(主键重复会抛出异常),相比默认的jdbc_copy,写入使用更少的Hologres资源。

说明

仅实时计算引擎VVR 8.0.5及以上版本且Hologres实例为2.1及以上版本支持该参数。

useRpcMode

是否通过RPC方式使用Hologres连接器。

Boolean

false

  • true:使用RPC方式使用Hologres连接器。

    sdkMode参数设置为rpc效果相同,通过RPC方式会降低SQL连接数。

  • false(默认值):使用JDBC方式使用Hologres连接器。

    通过JDBC方式会占用SQL连接,导致JDBC连接数增加。

说明
  • 该参数取值为true时与sdkMode=rpc同效,推荐操作详情请参见注意事项

  • property-version=1时,该参数下线。

mutatetype

数据写入模式。

String

insertorignore

  • insertorignore(默认值):保留首次出现的数据,忽略后续重复数据。

  • insertorreplace:后续数据整行替换已有数据。

  • insertorupdate:只更新sink中已提供的字段,其他字段保持不变。

    例如一张表有a、b、cd四个字段,a是主键,若结果表字段仅提供ab两个字段,在主键重复的情况下,系统只会更新b字段,cd保持不变。

说明
  • property-version=0时,默认值为insertorignore。

  • property-version=1时,默认值为insertorupdate。

partitionrouter

是否写入分区表。

Boolean

false

无。

createparttable

当写入分区表时,是否根据分区值自动创建不存在的分区表。

Boolean

false

RPC模式下,如果分区值中存在短划线(-),暂不支持自动创建分区表。

说明
  • 实时计算引擎VVR 8.0.3及以上版本,支持使用Date类型做分区键时自动创建分区表。

  • 请确保分区值不会出现脏数据,否则会创建错误的分区表导致Failover,建议慎用该参数。

  • sdk_mode设置为jdbc_copy时,不支持写入分区父表。

ignoredelete

是否忽略撤回消息。

Boolean

true

说明
  • 仅在mutatetype参数为insertorupdate时生效。

  • 实时计算引擎VVR 8.0.8及以上版本推荐使用sink.delete-strategy参数替换该参数。两个参数同时配置时,只有sink.delete-strategy参数生效。

  • property-version=0时,默认值为true。

  • property-version=1时,默认值为false。

sink.delete-strategy

撤回消息的处理策略。

String

  • IGNORE_DELETE:忽略Update BeforeDelete消息。适用于仅需插入或更新数据,而无需删除数据的场景。

  • NON_PK_FIELD_TO_NULL:忽略Update Before消息,并将Delete消息执行为将非主键字段更新为null。适用于希望在局部更新操作中执行删除操作而不影响其他列的场景。

  • DELETE_ROW_ON_PK:忽略Update Before消息,并将Delete消息执行为根据主键删除整行。适用于在局部更新过程中,希望执行删除整行操作,从而影响其他列的场景。

  • CHANGELOG_STANDARD:Flink框架按照 Flink SQL Changelog的工作原理运行,不忽略删除操作,并通过先删除数据再插入的方式执行更新操作,以确保数据准确性。适用于不涉及局部更新的场景

说明
  • 仅实时计算引擎VVR 8.0.8及以上版本支持该参数。

  • 启用NON_PK_FIELD_TO_NULL选项可能会导致记录中只有主键,其他所有列都为null。

connectionSize

单个Flink结果表任务所创建的JDBC连接池大小。

Integer

3

如果作业性能不足,建议您增加连接池大小。连接池大小和数据吞吐成正比。

jdbcWriteBatchSize

JDBC模式,Hologres Sink节点数据攒批条数(不是来一条数据处理一条,而是攒一批再处理)的最大值。

Integer

256

单位为数据行数。

说明

jdbcWriteBatchSizejdbcWriteBatchByteSizejdbcWriteFlushInterval三者之间为或的关系。如果同时设置了这三个参数,则满足其中一个,就进行写入结果数据。

jdbcWriteBatchByteSize

JDBC模式,Hologres Sink节点数据攒批字节数(不是来一条数据处理一条,而是攒一批再处理)的最大值。

Long

2*1024*1024字节,即2 MB

说明

jdbcWriteBatchSizejdbcWriteBatchByteSizejdbcWriteFlushInterval三者之间为或的关系。如果同时设置了这三个参数,则满足其中一个,就进行写入结果数据。

jdbcWriteFlushInterval

JDBC模式,Hologres Sink节点数据攒批写入Hologres的最长等待时间。

Long

10000

单位为毫秒。

说明

jdbcWriteBatchSizejdbcWriteBatchByteSizejdbcWriteFlushInterval三者之间为或的关系。如果同时设置了这三个参数,则满足其中一个,就进行写入结果数据。

ignoreNullWhenUpdate

mutatetype='insertOrUpdate'时,是否忽略更新写入数据中的Null值。

Boolean

false

  • false(默认值):将Null值写到Hologres结果表里。

  • true:忽略更新写入数据中的Null值。

说明

sdk_mode设置为jdbc_copy时,不支持此参数。

connectionPoolName

连接池名称。同一个TaskManager中,配置相同名称的连接池的表可以共享连接池。

String

取值为非'default'的任意字符串。如果多个表设置相同的连接池,则这些使用相同连接池的表的connectionSize参数也需要相同。

说明
  • VVR 8.0.3及以下版本:默认不共享,每个表使用自己的连接池。

  • VVR 8.0.4及以上版本:同一个作业中endpoint相同的表会默认共享连接池。作业中表数量较多时连接数可能相对不足影响性能,这种情况下推荐为不同的表设置不同的connectionPoolName。

  • 此参数可以按需配置,比如作业中有维表A,B以及结果表C,D,E五张hologres表,可以A表和B表使用'pool1',C表和D表使用'pool2',E表流量较大,单独使用'pool3'。

jdbcEnableDefaultForNotNullColumn

如果将Null值写入Hologres表中Not Null且无默认值的字段,是否允许连接器帮助填充一个默认值。

Boolean

true

  • true(默认值):允许连接器填充默认值并写入,规则如下。

    • 如果字段是String类型,则默认写为空("")。

    • 如果字段是Number类型,则默认写为0。

    • 如果是Date、timestamptimestamptz时间类型字段,则默认写为1970-01-01 00:00:00

  • false:不填充默认值,写NullNot Null字段时,会抛出异常。

remove-u0000-in-text.enabled

如果写入时字符串类型包含\u0000非法字符,是否允许连接器帮助去除。

Boolean

false

  • false(默认值):连接器不对数据进行操作,但碰到脏数据时写入可能抛出如下异常,ERROR: invalid byte sequence for encoding "UTF8": 0x00

    此时需要在源表提前处理脏数据,或者在SQL中定义脏数据处理逻辑。

  • true:连接器会帮助去除字符串类型中的\u0000,防止写入抛出异常。

重要
  • 实时计算引擎VVR 8.0.1及以上版本,仅sdkMode='jdbc'场景下支持该参数。

  • 实时计算引擎VVR 8.0.8及以上版本,仅sdkMode='jdbc_copy'sdkMode='jdbc'场景下支持该参数。

  • 如数据中包含aaa\00bbb类型,开启该参数可能导致数据无法匹配的情况,请根据业务数据具体情况,慎重使用。

partial-insert.enabled

是否只插入INSERT语句中定义的字段。

Boolean

false

  • false(默认值):无论INSERT语句中声明了哪些字段,都会更新结果表DDL中定义的所有字段,对于未在INSERT语句中声明的字段,会被更新为null。

  • true:将INSERT语句中定义的字段下推给连接器,从而可以只对声明的字段进行更新或插入。

说明

此参数仅在mutatetype参数配置为InsertOrUpdate时生效。

deduplication.enabled

jdbcjdbc_fixed模式写入攒批过程中,是否进行去重。

Boolean

true

  • true(默认值):如果一批数据中有主键相同的数据,默认进行去重,只保留最后一条到达的数据。以两个字段,其中第一个字段为主键的数据举例:

    • INSERT (1,'a')INSERT (1,'b')两条记录先后到达,去重之后只保留后到达的(1,'b')写入Hologres结果表中。

    • Hologres结果表中已经存在记录(1,'a'),此时DELETE (1,'a')INSERT (1,'b')两条记录先后到达,只保留后到达的(1,'b')写入hologres中,表现为直接更新,而不是先删除再插入。

  • false:在攒批过程中不进行去重,如果发现新到的数据和目前攒批的数据中存在主键相同的情况,先将攒批数据写入,写入完成之后再继续写入新到的数据。

说明
  • 仅实时计算引擎VVR 8.0.5及以上版本支持该参数。

  • 不允许攒批去重时,极端情况下(例如所有数据的主键都相同)写入会退化为不攒批的单条写入,对性能有一定影响。

check-and-put.column

启用条件更新能力,并指定检查的字段名。

String

参数取值必须设置为Hologres表存在的字段名。

重要
  • 仅实时计算引擎VVR 8.0.11及以上版本支持该参数。

  • sdkMode配置为jdbc_fixedjdbc场景下支持该参数。

  • 结果表必须有主键, mutateType参数值必须是Insertorupdate或者insertorreplace

  • 由于需要反查,建议结果表创建为行存表或者行列混存表。

  • 在数据重复较多的情况下,check-and-put操作会退化为单条写入,这将导致写入性能的降低。

check-and-put.operator

条件更新操作的比较操作符。

String

GREATER

比较新recordcheck字段与表中旧值,符合条件判断操作符时进行更新。目前支持配置为GREATER、GREATER_OR_EQUAL、EQUAL、NOT_EQUAL、LESS、LESS_OR_EQUAL、IS_NULL、IS_NOT_NULL。

说明

仅实时计算引擎VVR 8.0.11及以上版本支持该参数。

check-and-put.null-as

当条件更新时,如果旧数据为null,则将该null值视为此参数配置的有效值。

String

由于在PostgreSQL中,任何值与NULL进行比较的结果均为FALSE,因此当表中的原有数据为NULL时,进行更新操作时需要设置一个NULL-AS作为参数,相当于SQL中的COALESCE函数。

说明

仅实时计算引擎VVR 8.0.11及以上版本支持该参数。

aggressive.enabled

是否启用激进提交模式。

Boolean

false

设置为true时,即便攒批未达到预期条数,连接在空闲时将会被强制提交。在流量较小时,可以有效减少数据写入的延时。

说明
  • 仅实时计算引擎VVR 8.0.11及以上版本支持该参数。

  • sdkMode配置为jdbc_fixedjdbcjdbc_copy场景下支持该参数。

维表独有

参数

说明

数据类型

是否必填

默认值

备注

sdkMode

SDK模式。

String

jdbc

  • jdbc(默认值):表示使用jdbc模式进行查询,支持主键点查和非主键的查询,但是非主键的查询对性能影响较大,查询较慢。

  • rpc:表示使用rpc模式进行点查,仅支持主键点查,即维表的主键字段必须与Flink Join On的字段完全匹配,与jdbc模式的区别在于不占用连接数,且不支持读取HologresJsonb,RoarinBitmap类型。

  • jdbc_fixed:表示使用fixed jdbc方式进行点查,与jdbc模式的区别在于不占用连接数,且不支持读取HologresJsonb,RoarinBitmap类型。仅支持主键点查,即维表的主键字段必须与Flink Join On的字段完全匹配。目前此模式暂不支持查询开启数据脱敏功能的database,详情请参见数据脱敏

各版本推荐取值详情请参见注意事项

useRpcMode

是否通过RPC方式使用Hologres连接器。

Boolean

false

参数取值如下:

  • true:使用RPC方式使用Hologres连接器。与sdkMode参数设置为rpc效果相同。通过RPC方式会降低SQL连接数。

  • false(默认值):使用JDBC方式使用Hologres连接器。

    通过JDBC方式会占用SQL连接,导致JDBC连接数增加。

说明

该参数取值为true时与sdkMode=rpc同效,推荐操作详情请参见注意事项

connectionSize

单个Flink维表任务所创建的JDBC连接池大小。

Integer

3

如果作业性能不足,建议您增加连接池大小。连接池大小和数据吞吐成正比。

connectionPoolName

连接池名称。同一个TaskManager中,配置相同名称的连接池的表可以共享连接池。

String

取值为非'default'的任意字符串。如果多个表设置相同的连接池,则这些使用相同连接池的表的connectionSize参数也需要相同。

说明
  • VVR 8.0.3及以下版本:默认不共享,每个表使用自己的连接池。

  • VVR 8.0.4以上版本:同一个作业中Endpoint相同的表会默认共享连接池。作业中表数量较多时连接数可能相对不足影响性能,这种情况下推荐为不同的表设置不同的connectionPoolName。

  • 此参数可以按需配置,例如作业中有维表A,B以及结果表C,D,E五张hologres表,可以A表和B表使用pool1,C表和D表使用pool2,E表流量较大,单独使用pool3。

jdbcReadBatchSize

点查Hologres维表时,攒批处理的最大条数。

Integer

128

无。

jdbcReadBatchQueueSize

维表点查请求缓冲队列大小。

Integer

256

无。

jdbcReadTimeoutMs

维表点查的超时时间。

Long

默认值为0,表示不会超时

无。

jdbcReadRetryCount

维表点查超时时的重试次数。

Integer

见备注列。

本参数与jdbcRetryCount不同,后者是指连接发生异常时的重试次数。

说明

默认值:

  • VVR 8.0.5以下版本:1

  • VVR 8.0.5及以上版本:10

jdbcScanFetchSize

在一对多join(即没有使用完整主键)时使用scan接口,scan攒批处理数据的条数。

Integer

256

无。

jdbcScanTimeoutSeconds

scan操作的超时时间。

Integer

60

单位为秒。

cache

缓存策略。

String

None

Hologres仅支持NoneLRU两种缓存策略。

cacheSize

缓存大小。

Integer

10000

选择LRU缓存策略后,可以设置缓存大小。单位为条。

cacheTTLMs

缓存更新时间间隔。

Long

见备注列。

单位为毫秒。cacheTTLMs默认值和cache的配置有关:

  • 如果cache配置为LRU,则cacheTTLMs为缓存超时时间。默认不过期。

  • 如果cache配置为None,则cacheTTLMs可以不配置,表示缓存不超时。

cacheEmpty

是否缓存join结果为空的数据。

Boolean

true

  • true(默认值):缓存join结果为空的数据。

  • false:不缓存join结果为空的数据。

    但当join语句中AND前面条件符合而后面条件不符合时,依然会缓存join结果为空的数据。代码示例如下。

    LEFT JOIN latest_emergency FOR SYSTEM_TIME AS OF PROCTIME() AS t2
     ON t1.alarm_id = t2.alarm_id -- 如果发现是动态告警,则匹配时加入动态告警id,否则无需考虑动态告警id字段。
     AND CASE
     WHEN alarm_type = 2 THEN t1.dynamic_id = t2.dynamic_alarm_id
     ELSE true
     END

async

是否异步返回数据。

Boolean

false

  • true:表示异步返回数据。

  • false(默认值):表示不进行异步返回数据。

说明

异步返回数据是无序的。

FlinkHologres时区说明

时间类型

产品

类型

说明

Flink

Flink TIMESTAMP

表示没有时区信息的日期和时间,描述年、 月、日、小时、分钟、秒和小数秒对应的时间戳。可以通过一个字符串来指定,例如1970-01-01 00:00:04.001

Flink TIMESTAMP_LTZ

用于描述时间线上的绝对时间点,使用long保存从epoch至今的毫秒数,使用int保存毫秒中的纳秒数。epoch时间是从Java的标准epoch时间开始计算。在计算和可视化时, 每个TIMESTAMP_LTZ类型的数据都使用Session (会话)中配置的时区。可以用于跨时区的计算,因为它是一个基于epoch的绝对时间点,代表的就是不同时区的同一个绝对时间点。

相同的TIMESTAMP_LTZ值,在不同的时区可能会反映出不同的本地TIMESTAMP,例如:如果一个TIMESTAMP_LTZ值为2024-03-19T04:00:00Z,在上海时区(UTC+8)的本地时间戳会表示为2024-03-19T12:00:00,而在格林威治时区(UTC+0)则表示为2024-03-19T04:00:00

Hologres

TIMESTAMP

类似于FlinkTIMESTAMP类型,表示没有时区信息的日期和时间。存储数据时不会改变,即使客户端的时区发生变化,存储的值也保持不变。例如:2022-01-01 01:01:01.123456

TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ)

类似于FlinkTIMESTAMP_LTZ类型,它带有时区信息。Hologres存储TIMESTAMPTZ数据时,会将其转换为UTC时区的值。当查询数据时,Hologres会根据客户端的时区配置参数将UTC时区的值转换为客户端时区的值。

例如北京(UTC+8)时区的时间戳2022-02-01 10:33:20.125+08。在Hologres中存储为TIMESTAMPTZ类型时,其值会是2022-02-01 10:33:20.125+08

时间类型映射

  • 实时计算引擎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

  • 实时计算引擎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