フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

駅JPのデータを利用して何か開発する(sequelizeでCSVデータを一括登録する) -STEP2- 

はじめに

  • 前回で駅JPのテーブル定義を作成したので、今回は駅JPから提供されているマスタデータを一括登録するところまで。 px-wing.hatenablog.com

サンプルコード

  • 下記のコードはCSVファイルを1件つづ読み込んで1件ごと登録している
  const fs = require('fs');
  const csv = require('csv');
  const db = require('../models/index')
  ### 都道府県の登録
  fs.createReadStream(__dirname + '/../csv/pref.csv').pipe(csv.parse(function(err, data) {
    data.forEach(element => {
      db.prefs.create({
          pref_cd: element[0],
          pref_name: element[1]
      })
    });
  }));

  ### 企業情報の登録
  fs.createReadStream(__dirname + '/../csv/companies.csv').pipe(csv.parse(function(err, data) {
    data.forEach(element => {
      db.companies.create({
        id: element[0],
        company_cd: element[1],
        rr_cd: element[2],
        company_name: element[3],
        company_name_k: element[4],
        company_name_h: element[5],
        company_name_r: element[6], 
        comany_url: element[7],
        company_type: element[8],
        e_status: element[9],
        e_sort: element[10]
      })
    });
  }));

sequelizeでbulkCreateを使った場合

  • CSVファイルを読み込んで1件づつ登録していたらパフォーマンスがわるいので,bulkCreateメソッドを利用してbulkInsert処理を実装する
  /// Location情報の登録
  insertDate = []
  fs.createReadStream(__dirname + '/../csv/line20200619free.csv').pipe(csv.parse(function(err, data) {    
    data.forEach(element => {
      insertDate.push(
        {
          line_cd: element[0], 
          company_cd: element[1],
          line_name: element[2],
          line_name_k: element[3],
          line_name_h: element[4],
          line_color_c: element[5],
          line_color_t: element[6],
          lon: element[8],
          lat: element[9],
          zoom: element[10],
          e_status: element[11],
          e_sort: element[12]
        }
      )
    });
    db.lines.bulkCreate(insertDate)
  }));

  /// Station情報の登録
  insertDate = []
  fs.createReadStream(__dirname + '/../csv/station20200619free.csv').pipe(csv.parse(function(err, data) {    
    data.forEach(element => {
      insertDate.push(
        {
          station_cd: element[0],
          station_g_cd: element[1],
          station_name: element[2],
          station_name_k: element[3],
          station_name_r: element[4],
          line_cd: element[5],
          pref_cd: element[6],
          post: element[7],
          address: element[8],
          lon: element[9],
          lat: element[10],
          open_ymd: element[11],
          close_ymd: element[12],
          e_status: element[13],
          e_sort: element[14]        
        }
      )
    });
    db.stations.bulkCreate(insertDate)
  }));

  ## 接続駅マスタの登録
  insertDate = []
  fs.createReadStream(__dirname + '/../csv/join20200619.csv').pipe(csv.parse(function(err, data) {    
    data.forEach(element => {
      insertDate.push(
        {
          line_cd: element[0],
          station_cd1: element[1],
          station_cd2: element[2],
        }
      )
    });
    db.joins.bulkCreate(insertDate)
  }));

blog.kozakana.net