DockerでEmbulkの環境を作ってCSV/スプレッドシートを読み込ませてみる


# Dockerの中でEmbulk環境を構築


```sh
docker run -it --rm openjdk:8-slim bash
```

実行するとdockerの中に入ります。
javaが入っているか下記のコマンドで確認。

```sh
java -version
```

### Embulkのインストール

curlをインストール
```
apt-get update
apt-get install -y curl
```


今回は[Embulkの公式サイト](https://www.embulk.org/)でPast stableになっているv0.9.25を指定します。
インストールして権限を付与するコマンドを実行。

```sh
curl --create-dirs -o /usr/local/bin/embulk -L "https://dl.embulk.org/embulk-0.9.25.jar"
chmod +x /usr/local/bin/embulk
```

Embulkのバージョンを確認すると無事入っているのが確認できます。

```
embulk --version
```

# Dockerの設定

下記のようにフォルダを設定します。
```
files
├── embulk
│   └── Dockerfile
└── compose.yaml
```

```yaml:compose.yaml
services:
  embulk:
    container_name: embulk
    build: ./embulk
    tty: true
```

```dockerfile:Dockerfile
FROM openjdk:8-slim

# Install embulk
RUN apt-get update \
    && apt-get install -y curl \
    && curl --create-dirs -o /usr/local/bin/embulk -L "https://dl.embulk.org/embulk-0.9.25.jar" \
    && chmod +x /usr/local/bin/embulk
```

用意できたら次のコマンドでDockerを立ち上げます。

```sh
docker compose up -d
docker exec -it embulk /bin/bash
```

dockerの中でEmbulkが入っているかを確認

```sh
embulk --version
```

# DockerでCSVファイルを読み込ませてみる

フォルダ構成は次のように変更します。
```
files
├── embilk
│   ├── sample
│   │   └── customers.csv
│   ├── seed.yaml
│   └── Dockerfile
└── compose.yaml
```

下記を変更・追加します。

```Dockerfile:Dockerfile
FROM openjdk:8-slim

# Install embulk
RUN apt-get update \
    && apt-get install -y curl \
    && curl --create-dirs -o /usr/local/bin/embulk -L "https://dl.embulk.org/embulk-0.9.25.jar" \
    && chmod +x /usr/local/bin/embulk
WORKDIR /work
COPY ./ ./
```

```csvs:customers.csv
CustomerID,CustomerName,Email
1,Alice Johnson,alice@example.com
2,Bob Smith,bob@example.com
3,Charlie Lee,charlie@example.comcp
```



```yaml:seed.yaml
in:
  type: file
  path_prefix: "./sample/customers.csv"
out:
  type: stdout
```


再度Dockerを作成して入ります。

```sh
docker compose down --rmi all
docker compose up -d
docker exec -it embulk /bin/bash
```

seed.yamlを元にEmbulkでCSVを読み込んでコンソールに出力するためのyamlファイルを作成します。

```sh
embulk guess seed.yaml -o config.yaml
```

実行すると下記が入った `config.yaml` が作成されます。
これがCSVで取得してコンソールに出力するための設定ファイルになります。

```yaml:config.yaml
in:
  type: file
  path_prefix: ./sample/customers.csv
  parser:
    charset: UTF-8
    newline: LF
    type: csv
    delimiter: ','
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 1
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: CustomerID, type: long}
    - {name: CustomerName, type: string}
    - {name: Email, type: string}
out: {type: stdout}
```

これに対して下記のコマンドで実行できます。

```sh
embulk run config.yaml
```

下記でプレビューも実行できます。

```sh
embulk preview config.yaml
```

# スプレッドシート情報取得

[作成途中]

[サービスアカウントの作成](https://console.cloud.google.com/apis/credentials?referrer=search&cloudshell=true&hl=ja&inv=1&invt=Absq-Q&project=linear-enigma-289302
)


```
files
├── embilk
│   ├── sample
│   │   └── customers.csv
│   ├── ss.yaml
│   └── Dockerfile
└── compose.yaml
```

```
in:
    type: google_spreadsheets
    auth_method: service_account
    json_keyfile: service_account.json
    spreadsheets_url: https://docs.google.com/spreadsheets/d/************/edit#gid=0
    worksheet_title: シート1
    start_row: 2
    default_timezone: 'Asia/Tokyo'
    null_string: '\N'
    default_typecast: strict
    columns:
      - {name: CustomerID, type: long}
      - {name: CustomerName, type: string}
      - {name: Email, type: string}
out: {type: stdout}
```
```
docker compose down --rmi all
docker compose up -d
docker exec -it embulk /bin/bash
```

Dockerに入って下記を実行
```
embulk gem install embulk-input-google_spreadsheets
embulk gem install embulk-output-bigquery
```


# digdagの環境構築

Dockerの中に入って、公式サイトどおりに試してみまたら実行でいると思います。
https://docs.digdag.io/getting_started.html