В этом видео показан процесс, подробно описанный ниже в этой записи блога, чтобы можно было выбрать видео или быстро прочитать! 👍🏻😁

Недавно я написал код JavaScript для генерации некоторых данных для таблицы, и он показался относительно полезным, так что здесь он готов к использованию, как вы можете. (Полный файл js находится под описанием отдельных сегментов кода ниже). Этот файл простой генерации данных я собрал, чтобы создать csv для быстрого импорта данных в базу данных (Postgres, SQL Server или что-то еще, что вы можете захотеть). Имея это в виду, я добавил библиотеки и инициализировал репозиторий с нужными мне библиотеками.

npm install faker
npm install fs
faker = require('faker');
fs = require('fs');

Затем я включил строку столбца данных для csv. Я решил продолжить и настроить переменную на этом этапе, так как это будет необходимо, поскольку я добавлю остальные данные csv в саму переменную. Вероятно, есть более быстрый способ сделать это, но это был самый быстрый путь с точки зрения того, чтобы заставить что-то работать прямо сейчас.

После строки столбца я также устанавливаю базовые 8 UUID, которые будут связаны со значениями project_id, для случайного использования во время генерации данных. Идея заключается в том, что значения project_id представляют собой диапазон значений, которые будут в данных, которые будут у Subhendu, и все ip и другие записанные данные будут записаны с конкретным project_id и связаны с ним. Я использовал сайт генерации UUID для генерации этих первых 8 значений, этот сайт доступен здесь.

После этого я добавил цикл for, который будет использоваться для пошагового прохождения и создания каждой записи.

var data = "id,country,ip,created_at,updated_at,project_id\n";
let project_ids = [
    'c16f6dd8-facb-406f-90d9-45529f4c8eb7',
    'b6dcbc07-e237-402a-bf11-12bf2226c243',
    '33f45cab-0e14-4830-a51c-fd44a62d1adc',
    '5d390c9e-2cfa-471d-953d-f6727972aeba',
    'd6ef3dfd-9596-4391-b0ef-3d7a8a1a6d10',
    'e72c0ed8-d649-4c53-97c5-da793d7a8228',
    'bf020fd2-2514-4709-8108-a2810e61c503',
    'ead66a4a-968a-448c-a796-51c6a1da0c20'];
for (var i = 0; i < 500000; i++) {
    // TODO: Generation will go here.
}

Следующее, с чем я хотел разобраться, это две даты. Одно из них будет значением created_at, а другое — значением updated_at. Дата updated_at должна была отображаться как наступившая после даты created_at по очевидным причинам. Чтобы убедиться, что я могу рассчитать это, я добавил функцию для выполнения рандомизации! Первые две функции для получения дополнений по дням и часам, затем получение случайного значения для добавления для каждого, а затем получение рассчитанных дат.

function addDays(datetime, days) {
    let date = new Date(datetime.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}
function addHours(datetime, hours) {
    let time = new Date(datetime.valueOf())
    time.setTime(time.getTime() + (hours*60*60*1000));
    return time;
}
var days = faker.datatype.number({min:0, max:7})
var hours = faker.datatype.number({min:0, max:24})
var updated_at = new Date(faker.date.past())
var created_at = addHours(addDays(updated_at, -days), -hours)

После настройки отметок даты и времени для генерации данных строки я перешел к выбору конкретного project_id для строки.

var proj_id = project_ids[faker.datatype.number({min:0, max: 7})]

Еще одна вещь, которую я знал, что мне нужно будет сделать, это отфильтровать значения ' или ,, расположенные в странах, которые будут выбраны. Способ, которым я очищаю эти данные, чтобы убедиться, что он не нарушает процесс массового импорта SQL, довольно дешев, и в производственных данных я бы не стал этого делать, но он отлично работает для сгенерированных данных, подобных этому.

var cleanCountry = faker.address.country().replace(",", " ").replace("'", " ")

Если вам интересно, почему я вычисляю их до того, как генерирую общие данные и устанавливаю строку, я предпочитаю сохранять строку фактических вызовов данных либо для назначения заданной переменной, либо не более чем на один уровень точки в глубине моих вызовов. . Как вы сейчас увидите в данных уровня строки, генерируемых ниже.

data2 += 
    faker.datatype.uuid() + "," +
    cleanCountry + "," +
    faker.internet.ip() + "," +
    created_at.toISOString() + "," +
    updated_at.toISOString() + "," +
    proj_id + "\n"

Теперь последний шаг — создать файл для всех этих строк csv.

fs.writeFile('kundu_table_data.csv', data, function (err) {
  if (err) return console.log(err);
  console.log('Data file written.');
});

Результаты.