1

我正在 Spark 中编写流式作业以将数据加载到 Splice Machine 中。我按照社区教程使用 VTI 将数据插入 Splice,但所有示例都执行 INSERT。相反,我应该对记录执行 UPSERT。有什么办法可以做到这一点?

谢谢你。

4

1 回答 1

2

是的,您可以通过将 VTI 语句更改为使用 insertMode 提示来执行 upsert。您的声明将类似于以下内容:

INSERT INTO IOT.SENSOR_MESSAGES --splice-properties insertMode=UPSERT select s.* from new com.splicemachine.tutorials.sparkstreaming.kafka.SensorMessageVTI(?) s ( id varchar(20), enter code here location varchar(50), temperature decimal(12,5), humidity decimal(12,5), recordedtime timestamp );

请注意,在您的 java 代码中,您需要在提示后添加一个换行符 (\n),否则它会认为所有内容都是提示的一部分。如果您使用的是 2.0.x 版本,则使用 VTI 的提示存在问题,该问题已在下一版本的拼接机中修复,我们可以将修复移植回该版本。

使用 VTI 时您可能会发现另外两个有用的提示是:

  • statusDirectory:将 import / upsert 消息放在 HDFS 上的错误目录中,就像 SYSCS_UTIL.IMPORT_DATA 语句一样
  • badRecordsAllowed:表示进程失败前允许的坏记录数
于 2017-01-03T16:02:50.010 回答