Amazon redshift 如果任何列具有来自s3的任何空值,则无法将数据插入红移表

Amazon redshift 如果任何列具有来自s3的任何空值,则无法将数据插入红移表,amazon-redshift,streamsets,Amazon Redshift,Streamsets,我有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,NI1L

我有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
此处注意:文本中有些值为NULL。当尝试使用jdbc加载器和streamsets transformer(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 
如果我将所有空值转换为字符串,它将按预期工作。谁能用正确的方法指导我

问题是。解决方法是转换为字符串

您可以使用Field Replacer来创建

我们Streamset正在考虑在将来的版本中解决这个问题。

问题在于。解决方法是转换为字符串

您可以使用Field Replacer来创建


Streamset正在考虑在将来的版本中解决此问题。

如果表中有很多列,则无法将空值转换为字符串,如果任何一个值为空,也会出现此问题,因此,在将数据加载到redshift时,我们需要将nvl应用于所有列。另一个拦截器是transformer,它不支持s3中的复制操作,这与data collector不同。我们正在即将发布的transformer中添加对redshift的支持。如果表中有很多列,则无法将空值转换为字符串,此外,如果任何一个值为null,则会出现此问题,因此我们需要在将数据加载到redshift时对所有列应用nvl。另一个拦截器是transformer,它不支持从s3复制操作,这与data collector不同。我们正在即将发布的transformer中添加对redshift的支持。