Elixir에서 BigQuery를 조작하는 도구를 만들었습니다.

6016 단어 mixElixirBigQuery
Elixir에서 BigQuery의 스키마 관리를 포함하여 여러 가지를 원했지만 원했을 때 좋은 도구를 찾을 수 없었기 때문에 직접 만들었습니다.
그래서 이쪽에서 조금 소개시켜 주세요.

만든 것


  • 기주 b. 코 m / gr8 ぢ s 단세 / b ぁ 톤
  • 에 x. pm / Pac 가게 s / b 퐁 톤

  • 사용법



    준비


  • 먼저 다음 설정이 필요합니다
  • # mix.exs
    def deps do
      [
        {:blanton, "~> 0.1.3"}
      ]
    end
    
    # config/config.exs
    config :goth,
      json: "path/to/google/json/creds.json" |> File.read!
    
    config :blanton,
      project_id: "PROJECT_ID",
      dataset_id: "DATASET_ID"
    

    테이블 만들기


  • 우선 lib/에 적절한 디렉토리를 작성해 둔다
  • 다음과 같은 파일 만들기
  • # lib/APP_NAME/bq_schema/TABLE_NAME.ex
    
    defmodule APP_NAME.BqSchema.TABLE_NAME do
      # ↓をuseする
      use Blanton.Schema
    
      # schemaマクロの中にテーブルの定義を書いていく
      schema :TABLE_NAME do
        field :column_name, :string, :required
        field :some_field_column, :record, :repeated, [
          sub_field(:name, :string, :nullable),
          sub_field(:price, :int64, :nullable),
        ]
      end
    
      # Table作成時に指定するオプションはこっちに指定する
      # options do
      #   partitiondate
      #   register :timePartitioning, %GoogleApi.BigQuery.V2.Model.TimePartitioning{type: "DAY"}
      # end
    end
    
  • 파일을 만든 후 mix bq.migrate PATH/TO/SCEHMA_DIR를 실행하면 BigQuery에 테이블이 만들어집니다.
  • mix bq.migrate.drop를 실행하면 용서없이 테이블이 삭제됩니다.


  • 레코드 삽입


  • 미리 삽입할 데이터를 Map 배열로 준비합니다.
  • Blanton.Record.insert("TABLE_NAME", records) 로 삽입할 수 있습니다
  • 
    records = [
      %{name: "安室透", age: 29},
      %{name: "赤井秀一", age: 32},
    ]
    
    table_name = "users"
    Blanton.Record.insert("PROJECT_ID", "DATASET_ID", table_name, records)
    Blanton.Record.insert(table_name, records)
    

    레코드 검색 기능 없음


  • 이 도구가 필요할 때 SELECT 문을 발행 할 계획이 없기 때문에 현재 (2020/8/6)에서는 SELECT를 할 수 없습니다
  • 다만 곧 대응할 예정입니다.


  • 덤 #1



    누구나 사용할 수 있는 패키지를 쓴 것이 실은 처음이므로 모르는 곳을 조사하면서 실장했습니다.
    Elixir답지 않은 곳도 아마 포함하고 있다고 생각합니다만 hex.pm에 공개하는 곳까지 어떻게든 가져갈 수 있었습니다.
    벌써 스스로는 다른 리포지토리에서도 이용하고 있습니다만, 나 이외에도 몇몇 분이 아무래도 다운로드해 주고 있는 것 같아서 매우 기쁘게 생각합니다.
    버그라든지 어색한 곳 찾아냈다든지 기능 추가했다든가 있으면 PR 받을 수 있으면 다행입니다.

    덤 #2



    Elixir에서 라이브러리를 찾을 때 Ruby 등의 언어라고 구그라고 생각합니다만 Elixir라고 나오지 않을 때가 있습니다.
    그런 때는 에 x. pm 에서 검색해 보는 것이 추천입니다!

    좋은 웹페이지 즐겨찾기