В этом видео показан процесс, подробно описанный ниже в этой записи блога, чтобы можно было выбрать видео или быстро прочитать! 👍🏻😁
Недавно я написал код 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.');
});
Результаты.