Кажется, что это должно быть просто сделать, но пока не удалось заставить это работать чисто для длинных списков:

Предыдущая ячейка:

val myList = List(111,222)

Текущая ячейка:

%sql
DROP TABLE IF EXISTS myTable;

CREATE TABLE myTable AS
    SELECT * FROM datalake.someTable t
      WHERE t.someColumn IN myList --correctly parse the list here

Одним из решений может быть использование виджета, но, похоже, это для строк, а для длинных списков будет ограничиваться максимальная длина строки? Любая помощь приветствуется!

0
Leigh Mathieson 28 Окт 2020 в 22:27

1 ответ

Лучший ответ

Вы можете зарегистрировать определяемую пользователем функцию, содержащую вашу переменную. Пользовательские функции можно передавать в ячейки SQL, как описано в здесь

Ваш код будет в вашей ячейке scala:

val myList = List(111, 222)
val myListUdf = () => myList
spark.udf.register("my_list", myListUdf)

А затем вы можете выполнить запрос в своей ячейке SQL:

%sql

DROP TABLE IF EXISTS myTable;

CREATE TABLE myTable AS
    SELECT * FROM datalake.someTable t
      WHERE array_contains(my_list(), t.someColumn)
2
Vincent Doba 28 Окт 2020 в 21:25