Teradata SQL: вставка случайных данных для тестирования в таблицу

Я пытаюсь создать случайные данные и вставить их в таблицу. Прямо сейчас просто думаю, какие эффективные подходы для этого. например

Create  volatile table mytb , no fallback, no journal
( C1 integer not null
  C2 Varchar (50) Not null , 
  C3 D1 Date Not null, 
  C4 D2 date not null 
) with data primary index ( c1) on commit preserve rows; 

Я хочу вставить значение случайным образом для X итераций для определенного списка или диапазона значений каждого столбца. например Диапазон C1 составляет от 30 до 3000000. C2 представляет собой список с («одобрено», «ожидает», «неизвестно», «оспаривается», «удаляется», «обработано», «предварительно обработано», «отклонено») и т. д. C3 дата между 01-01-1999 и 31-12-2015 и т. д. Затем, скажем, для 1 миллиона итераций я хотел бы вставить случайные значения для этих столбцов и СОЗДАТЬ СКЕВ для определенных значений, то есть должно быть изобилие этих значений против остальные. Кто-то копался в этом раньше. Какой лучший способ сделать это - рекурсивная логика Q?


person user1874594    schedule 07.01.2016    source источник


Ответы (1)


Я использую RANDOM для создания тестовых данных:

SELECT
   RANDOM(30,3000000) AS c1,
   CASE RANDOM(1,8) 
      WHEN 1 THEN 'approved'
      WHEN 2 THEN 'pending'
      WHEN 3 THEN 'unknown'
      WHEN 4 THEN 'disputed'
      WHEN 5 THEN 'wip'
      WHEN 6 THEN 'processed'
      WHEN 7 THEN 'pre-processed'
      WHEN 8 THEN 'denied'
   END,
   DATE '1999-01-01' + RANDOM(0,6208) -- up to 2015-12-31
FROM sys_calendar.CALENDAR -- any table with a large number of rows

Это приводит к равномерному распределению данных, если вы хотите перекоса, вы можете запускать разные вставки/выборки или играть с несколькими RANDOM:

RANDOM(1,50) + RANDOM(0,50)
(RANDOM(1, 50) * RANDOM(1,200) + RANDOM(0,100)) / 100.00
person dnoeth    schedule 07.01.2016
comment
ТИ . Как вы запускаете это (рекурсивно) для X итераций. - person user1874594; 07.01.2016
comment
Неважно - я не заметил, что системный календарь дает итерации. Я знал о случайной части - просто задавался вопросом, как бы вы получили эти итерации, и что ж... вот оно... нет необходимости во всей сложной логике, которую я себе представлял. - person user1874594; 07.01.2016
comment
Это как раз может пригодиться! Спасибо! - person Rob Paller; 08.01.2016
comment
select top N RANDOM(30,3000000) AS c1, CASE RANDOM(1,8) WHEN 1 THEN 'одобрено' WHEN 2 THEN 'ожидание рассмотрения' WHEN 3 THEN 'неизвестно' WHEN 4 THEN 'оспаривается' WHEN 5 THEN 'wip' WHEN 6 THEN 'обработано' WHEN 7 THEN 'предварительно обработано' WHEN 8 THEN 'отклонено' END, DATE '1999-01-01' + RANDOM(0,6208) FROM sys_calendar.CALENDAR даст вам N строк - person louigi600; 18.01.2021