Функция с табличным значением (возвращающая табличное значение)

Функция, возвращающая отношение или набор строк. Существует два типа возвращающие табличное:

  • Указанный в FROM предложении, например range .
  • Задается в SELECT LATERAL VIEW предложениях и, например explode .

Синтаксис

function_name ( expression [ , ... ] ) [ table_alias ]

Параметры

  • expression

    Сочетание одного или нескольких значений, операторов и функций SQL, которые приводят к значению.

  • table_alias

    Временное имя с необязательным списком имен столбцов.

    Синтаксис:[ AS ] table_name [ ( column_name [ , ... ] ) ]

Поддерживаемые функции с табличным значением

Возвращающие табличное, который можно указать в FROM предложениях

Функция Типы аргументов Описание
диапазон (конец) Long Создает таблицу с одним столбцом Лонгтипе с именем ID, содержащим строки в диапазоне от 0 до end (с монопольным доступом) и значением шага 1.
диапазон (начало, конец) Длинный, длинный Создает таблицу с одним столбцом Лонгтипе с именем ID, содержащим строки в диапазоне от начала до конца (с монопольным доступом) и значением шага 1.
диапазон (начало, конец, шаг) Длинные, длинные, длинные Создает таблицу с одним столбцом Лонгтипе с именем ID, содержащим строки в диапазоне от начала до конца (монопольного) с параметром Step.
диапазон (начало, конец, шаг, Нумпартитионс) Long, Long, Long, int Создает таблицу с одним столбцом Лонгтипе с именем ID, содержащим строки в диапазоне от начала до конца (с монопольным доступом) и значением шага с указанным номером секции Нумпартитионс.

Возвращающие табличное, который может быть указан SELECT в LATERAL VIEW предложениях and

Функция Типы аргументов Описание
раскрыть (выражение) Массив или Map Разделяет элементы expr массива на несколько строк или элементы выражения типа Map в несколько строк и столбцов. Если не указано иное, использует имя столбца по умолчанию Col для элементов массива или ключа и значения для элементов этой схемы.
explode_outer (expr) Массив или Map Разделяет элементы expr массива на несколько строк или элементы выражения типа Map в несколько строк и столбцов. Если не указано иное, использует имя столбца по умолчанию Col для элементов массива или ключа и значения для элементов этой схемы.
Inline (expr) Expression Разворачивает массив структур в таблицу. Использует имена столбцов col1, col2 и т. д. по умолчанию, если не указано иное.
inline_outer (expr) Expression Разворачивает массив структур в таблицу. Использует имена столбцов col1, col2 и т. д. по умолчанию, если не указано иное.
посексплоде (expr) Массив или Map Разделяет элементы expr массива на несколько строк с позициями или элементы выражения типа Map в несколько строк и столбцов с позициями. Если не указано иное, использует имя столбца POS для параметра позиция, столбец для элементов массива или ключа и значение для элементов на карте.
posexplode_outer (expr) Массив или Map Разделяет элементы expr массива на несколько строк с позициями или элементы выражения типа Map в несколько строк и столбцов с позициями. Если не указано иное, использует имя столбца POS для параметра позиция, столбец для элементов массива или ключа и значение для элементов на карте.
Stack (n, выражение1,..., експрк) Seq [выражение] Разделяет Выражение1,..., експрк на n строк. Использует имена столбцов col0, col1 и т. д. по умолчанию, если не указано иное.
json_tuple (Жсонстр, P1, P2,..., PN) Seq [выражение] Возвращает кортеж, такой как функция, get_json_object, но принимает несколько имен. Все входные параметры и типы выходных столбцов являются строковыми.
parse_url (URL-адрес, Парттоекстракт [, ключ]) Seq [выражение] Извлекает часть из URL-адреса.

Примеры

-- range call with end
SELECT * FROM range(6 + cos(3));
+---+
| id|
+---+
|  0|
|  1|
|  2|
|  3|
|  4|
+---+

-- range call with start and end
SELECT * FROM range(5, 10);
+---+
| id|
+---+
|  5|
|  6|
|  7|
|  8|
|  9|
+---+

-- range call with numPartitions
SELECT * FROM range(0, 10, 2, 200);
+---+
| id|
+---+
|  0|
|  2|
|  4|
|  6|
|  8|
+---+

-- range call with a table alias
SELECT * FROM range(5, 8) AS test;
+---+
| id|
+---+
|  5|
|  6|
|  7|
+---+

SELECT explode(array(10, 20));
+---+
|col|
+---+
| 10|
| 20|
+---+

SELECT inline(array(struct(1, 'a'), struct(2, 'b')));
+----+----+
|col1|col2|
+----+----+
|   1|   a|
|   2|   b|
+----+----+

SELECT posexplode(array(10,20));
+---+---+
|pos|col|
+---+---+
|  0| 10|
|  1| 20|
+---+---+

SELECT stack(2, 1, 2, 3);
+----+----+
|col0|col1|
+----+----+
|   1|   2|
|   3|null|
+----+----+

SELECT json_tuple('{"a":1, "b":2}', 'a', 'b');
+---+---+
| c0| c1|
+---+---+
|  1|  2|
+---+---+

SELECT parse_url('http://spark.apache.org/path?query=1', 'HOST');
+-----------------------------------------------------+
|parse_url(http://spark.apache.org/path?query=1, HOST)|
+-----------------------------------------------------+
|                                     spark.apache.org|
+-----------------------------------------------------+

-- Use explode in a LATERAL VIEW clause
CREATE TABLE test (c1 INT);
INSERT INTO test VALUES (1);
INSERT INTO test VALUES (2);
SELECT * FROM test LATERAL VIEW explode (ARRAY(3,4)) AS c2;
+--+--+
|c1|c2|
+--+--+
| 1| 3|
| 1| 4|
| 2| 3|
| 2| 4|
+--+--+