У меня есть следующее в записной книжке Azure (databricks sql):
CREATE TABLE my_new_big_table AS
SELECT t.*
FROM my_table t
CROSS JOIN VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10) v(i);
Это дублирует my_table
, 10 раз, однако как я могу использовать цикл (SEQUENCE, EXPLORE
) для создания итераций 100, 1000 и т. д.?
Помогает ли функция последовательности? sequence(1, 100)
? Посмотрите, можете ли вы присоединиться к таблице с массивом, используя explode
? то есть explode(sequence(1, 100))
Да, я уже пробовал CROSS JOIN SEQUENCE(0, 100);
Если только SQL, используйте ЗНАЧЕНИЯ CROSS JOIN (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) v (i ) ЗНАЧЕНИЯ ПЕРЕКРЕСТНОГО СОЕДИНЕНИЯ (1), (2), (3), (4), (5), (6), (7), (8), (9), (10) v2(i) ЗНАЧЕНИЯ ПЕРЕКРЕСТНОГО СОЕДИНЕНИЯ (1),(2),(3),(4),(5),(6),(7),(8),(9),(10) v3(i) - создать 1000 итераций.
В зависимости от версии SQL Server вы можете использовать GENERATE_SERIES (n, m) для создания ряда чисел между n и m граничными значениями интервала.
Это мои образцы данных:
С вашим кодом я получил вывод, как показано ниже, в котором каждая строка повторяется 10 раз.
Чтобы сделать это динамически, вы можете использовать range(start,end)
, как показано ниже.
%sql
CREATE TABLE result2 AS
SELECT t.*
FROM sample1 as t
CROSS JOIN (select * from range(0,10)) v(i);
select * from result2;
Мой результат:
(Или)
Используйте sequence(start,end)
с explode()
, как обсуждалось сообществом в комментариях.
create table result3 as
SELECT t.*
FROM sample1 as t
CROSS JOIN (select explode(sequence(1,10))) v(i);
select * from result3;
спасибо, это более или менее то, что я хотел. Однако мне бы хотелось, чтобы «id» не содержал дубликатов, поэтому, возможно, замените все записи в «id» чем-то уникальным, например номером строки.
Вы не используете цикл. Вы выполняете перекрестное соединение со специальной таблицей. Прямо сейчас вы создаете строки специальной таблицы с предложением
VALUES
. Вместо этого вы можете использоватьSEQUENCE
для создания массива иEXPLODE
для преобразования этого массива в строки. Пожалуйста, сначала попробуйте сами, прежде чем обращаться сюда за помощью.