Невозможно вставить данные в таблицу красного смещения, если любой столбец имеет значения NULL из s3 - PullRequest
1 голос
/ 12 февраля 2020

У меня исходные данные в формате s3 в следующем формате.

WM_ID,SOURCE_SYSTEM,DB_ID,JOB_NUM,NOTE_TYPE,NOTE_TEXT,NOTE_DATE_TIME
WOR25,CORE,NI,NI1LBE14,GEN,"",2020-02-01 17:23:32
WOR25,FSI,NI,NI1LBR39,CPN,"",2020-02-04 13:47:35
WOR25,FSI,NI,NI1LBE14,ACC,"",2020-02-03 13:22:56
WOR25,CORE,NI,NI1LBR39,FIT,NA,2020-02-05 13:13:08

Здесь NOTE_TEXT имеет некоторые значения с NULL. При попытке вставить в таблицу красного смещения, используя загрузчик jdb c с использованием преобразователя потоковых наборов (spark-submit), это не работает.

RUN_ERROR: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 4.0 failed 1 times, most recent failure: Lost task 0.0 in stage 4.0 (TID 4, localhost, executor driver): java.sql.SQLFeatureNotSupportedException: [Amazon][JDBC](10220) Driver does not support this optional feature. at com.amazon.exceptions.ExceptionConverter.toSQLException(Unknown Source) at com.amazon.jdbc.common.SPreparedStatement.checkTypeSupported(Unknown Source) at com.amazon.jdbc.common.SPreparedStatement.setNull(Unknown Source) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.savePartition(JdbcUtils.scala:658) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:834) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$$anonfun$saveTable$1.apply(JdbcUtils.scala:834) at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) at org.apache.spark.rdd.RDD$$anonfun$foreachPartition$1$$anonfun$apply$28.apply(RDD.scala:935) at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:2101) at 

Если я преобразую все значения NULL в строку, он будет работать как положено. Кто-нибудь может направить меня с правильным подходом?

1 Ответ

0 голосов
/ 13 февраля 2020

Проблема в том, что сам драйвер Redshift JDB C не поддерживает запись нулевых значений . Обходной путь должен преобразовать в строку.

Вы можете использовать Field Replacer для замены NULL на заполнители .

Мы в StreamSets смотрим, как решить эту проблему в следующем выпуске.

...