Oracle эквивалент ИНСТР в Spark SQL - PullRequest
0 голосов
/ 03 февраля 2020

Я пытался повторить функцию oracle Instr, но мне кажется, что не все аргументы существуют в Oracle. Я получаю эту ошибку и хочу включить это преобразование в поле "plataforma" в таблице, но не могу:

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

Я сделал преобразование поля таким образом, но я не знаю, является ли оно правильным:

enter image description here

Как мне воспроизвести ту же самую функцию Oracle в Spark? Мне нужно сделать только это:

Источник:

apache-spark-sql
sql-server-dw

Результат:

apache-spark
sql-server

1 Ответ

1 голос
/ 04 февраля 2020

Требуется функция substring_index:

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

Возвращает подстроку перед 2 вхождениями -.

Полагаю, вы хотите получить подстроку до последнего появления -. Таким образом, вы можете подсчитать число - во входной строке и скомбинировать его с функцией substring_index следующим образом:

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

Где size(split(col, '-')) - 1 дает число вхождений -.

...