Использование CROSS JOIN SEQUENCE для создания больших дублированных таблиц

У меня есть следующее в записной книжке 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 и т. д.?

Вы не используете цикл. Вы выполняете перекрестное соединение со специальной таблицей. Прямо сейчас вы создаете строки специальной таблицы с предложением VALUES. Вместо этого вы можете использовать SEQUENCE для создания массива и EXPLODE для преобразования этого массива в строки. Пожалуйста, сначала попробуйте сами, прежде чем обращаться сюда за помощью.

Thorsten Kettner 17.02.2023 11:33

Помогает ли функция последовательности? sequence(1, 100)? Посмотрите, можете ли вы присоединиться к таблице с массивом, используя explode? то есть explode(sequence(1, 100))

shahkalpesh 17.02.2023 11:46

Да, я уже пробовал CROSS JOIN SEQUENCE(0, 100);

pymat 17.02.2023 11:51

Если только 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 итераций.

ValNik 17.02.2023 12:35

В зависимости от версии SQL Server вы можете использовать GENERATE_SERIES (n, m) для создания ряда чисел между n и m граничными значениями интервала.

SQLpro 17.02.2023 13:26
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
5
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это мои образцы данных:

С вашим кодом я получил вывод, как показано ниже, в котором каждая строка повторяется 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» чем-то уникальным, например номером строки.

pymat 22.02.2023 08:39

Другие вопросы по теме