小编lem*_*ter的帖子

使用\ COPY将带有JSON字段的CSV加载到Postgres

我正在尝试使用\ COPY命令将TSV数据从文件加载到Postgres表中。

这是一个示例数据行:

2017-11-22 23:00:00     "{\"id\":123,\"class\":101,\"level\":3}"
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的psql命令:

\COPY bogus.test_table (timestamp, sample_json) FROM '/local/file.txt' DELIMITER E'\t'
Run Code Online (Sandbox Code Playgroud)

这是我收到的错误:

ERROR:  invalid input syntax for type json
DETAIL:  Token "sample_json" is invalid.
CONTEXT:  JSON data, line 1: "{"sample_json...
COPY test_table, line 1, column sample_json: ""{\"id\":123,\"class\":101,\"level\":3}""
Run Code Online (Sandbox Code Playgroud)

我验证了JSON的格式正确,并阅读了几个类似的问题,但是我仍然不确定这里发生了什么。一个解释会很棒

csv postgresql json psql postgresql-9.4

4
推荐指数
1
解决办法
2974
查看次数

Spark 2.2 / Jupyter Notebook SQL regexp_extract函数与正则表达式模式不匹配

我在Jupyter(Scala)笔记本中使用regexp_extract Spark 2.2 SQL函数来匹配包含11个或更多重复字符的字符串。

这是正则表达式:

^(.)\1{10,}$
Run Code Online (Sandbox Code Playgroud)

现在,让我们用regexp_extract函数查看该模式。这是我在笔记本中使用它的方式:

spark.sql("SELECT REGEXP_EXTRACT('hhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar").show()

+-------------+
|ExtractedChar|
+-------------+
|             |
+-------------+
Run Code Online (Sandbox Code Playgroud)

奇怪,没有输出。让我们确保我的regex模式是正确的。是的,看起来不错。

您可能想知道为什么正则表达式模式包含两个“ \\”字符,这是因为它是一个转义字符,所以两个是必需的。这是一些验证:

1. val string = "SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar"
2. println(string)
SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\1{10,}$', 1) as ExtractedChar
Run Code Online (Sandbox Code Playgroud)

好吧,让我们确保regexp_extract函数正常工作:

spark.sqlContext.sql("SELECT REGEXP_EXTRACT('TESTING', '^.', 0) as test").show()
+----+
|test|
+----+
|   T|
+----+
Run Code Online (Sandbox Code Playgroud)

好吧,也许问题是Jupyter笔记本?检查并使用Scala REPL之后,我仍然遇到相同的问题。

有什么想法为什么我无法使此正则表达式成功匹配吗?

编辑:Spark SQL是对此的要求。我可以使用Scala创建自己的UDF;但是,UDF用Spark装黑盒,这意味着它们不会得到完全优化。

regex scala apache-spark apache-spark-sql jupyter-notebook

2
推荐指数
1
解决办法
1525
查看次数