在我建立了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