在我建立了JSON与字符串连接手动结束时,
# UPLOAD AS JSON
UNLOAD ('SELECT CHR(123)||
\'"receiver_idfa":"\'||nvl(receiver_idfa,\'\')||\'",\'||
\'"brand":"\'||nvl(brand,\'\')||\'",\'||
\'"total":\'||nvl(total,0)||\',\'||
\'"screen_dpi":\'||nvl(screen_dpi,0)||\',\'||
\'"city":"\'||nvl(city,\'\')||\'",\'||
\'"wifi":\'||nvl(convert(integer,wifi),0)||\',\'||
\'"duration":\'||nvl(duration,0)||\',\'||
\'"carrier":"\'||nvl(carrier,\'\')||\'",\'||
\'"screen_width":\'||nvl(screen_width,0)||\',\'||
\'"time":\'||nvl("time",0)||\',\'||
\'"ts":"\'||nvl(ts,\'1970-01-01 00:00:00\')||\'",\'||
\'"month":\'||nvl(month,0)||\',\'||
\'"year":\'||nvl(year,0)||\',\'||
\'"day":\'||nvl(day,0)||\',\'||
\'"hour":\'||nvl(hour,0)||\',\'||
\'"minute":\'||nvl(minute,0)||
chr(125) from event_logs')
TO 's3://BUCKET/PREFIX/KEY'
WITH CREDENTIALS AS 'CREDENTIALS...'
GZIP
DELIMITER AS '\t'
;
这里,
nvl
功能用于更换空
convert
被用于替换布尔为int
||
是Redshift中的连接运算符
chr
用于生成{
和}
字符
这个操作是不一样快卸刚刚以csv。它需要2-3倍的时间。但是,因为我们需要做一次,它很好。我卸载了大约1600万条记录并成功导入了Spark中的所有记录。
注意:通过spark解析json不是有效的方法。还有其他格式更快,例如parquet文件,序列文件。所以对于火花来说,这可能不是一条正确的道路。但对于卸载为JSON,您可以使用此解决方案。
这真棒,帮了我很多!谢谢! – unpairestgood