csv 获取错误:双精度类型的输入语法无效:PostgreSQL中的“”

tmb3ates  于 2022-12-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(308)

我尝试使用以下命令将数据从CSV复制到Postgres表。

psql  -c "\COPY team_cweo.bsa_mobile_pre_retention_asset FROM 'part-00199-8372009a-439d-49e0-9efc-141aead78131-c000.csv' CSV HEADER DELIMITER ','

CSV文件是Spark DataFrameWriter的结果。我意识到有些字段存在空值,在CSV文件中表示为**""**。但由于这一点,我得到了以下错误:

ERROR:  invalid input syntax for type double precision: ""
CONTEXT:  COPY bsa_mobile_pre_retention_asset, line 3, column 6281410000207

我应该如何做才能让Postgresql知道**""**是空值而不是空字符串。或者我应该在DataFrameWriter中执行一些操作,以便空值可以在CSV文件中表示为其他内容。

zujrkrfu

zujrkrfu1#

是的,如果您可以选择NULL值的不同表示法,最好是空字串。无论如何,它不能包含逸出字符(预设为")。然后您可以使用COPYNULL选项,例如NULL '(null)'(预设值为空字串)。
如果无法执行此操作,则可以将列定义为text类型,然后使用

ALTER TABLE tab
   ALTER col TYPE double precision USING CAST (nullif(col, '') AS double precision);

但这需要重写表,这可能需要一段时间。

相关问题