【问题标题】:Oracle INSTR equivalent in Spark SQLSpark SQL 中的 Oracle INSTR 等效项
【发布时间】:2020-02-03 19:05:35
【问题描述】:

我试图复制 oracle Instr 函数,但在我看来,Oracle 中并不存在所有参数。我收到此错误,我想将此转换包含在表中的“平台”字段中,但我不能:

SELECT
SUBSTR(a.SOURCE, 0, INSTR(a.SOURCE, '-', 1, 2) - 1) AS plataforma,
COUNT(*) AS qtd
FROM db1.table AS as a
LEFT JOIN db1.table2 AS b ON a.ID=b.id
GROUP BY SUBSTR(a.SOURCE, 0, INSTR(a.SOURCE, '-', 1, 2) - 1)
ORDER BY qtd

Apache Spark 2.0 数据库在运行此程序时遇到错误 询问。 运行查询时出错:org.apache.spark.sql.AnalysisException:函数 instr 的参数数量无效。预期:2;发现:4; 第 8 行第 45 行

我以这种方式对字段进行了转换,但我不知道它是否正确:

如何在 Spark 中复制相同的 Oracle 函数?我只需要这样做:

来源:

apache-spark-sql
sql-server-dw

结果:

apache-spark
sql-server

【问题讨论】:

  • 如错误消息所述,函数 instr 需要 2 个参数,但您在查询中传递了 4 个参数...
  • 如何复制这个 oracle 函数? SUBSTR('公司楼层', 0, INSTR('公司楼层','OR', -3, 2) - 1)

标签: apache-spark apache-spark-sql looker


【解决方案1】:

你要找的是substring_index函数:

substring_index('apache-spark-sql', '-', 2)

它返回出现 2 次 - 之前的子字符串。

我想您想在最后一次出现 - 之前获取子字符串。因此,您可以计算输入字符串中- 的数量,并将其与substring_index 函数结合起来,如下所示:

substring_index(col, '-', size(split(col, '-')) - 1)

其中size(split(col, '-')) - 1 给出了- 的出现次数。

【讨论】:

    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2020-12-25
    • 2015-01-22
    • 2014-09-29
    • 1970-01-01
    • 2018-10-17
    相关资源
    最近更新 更多