Databricks SQLにおけるテーブルの作成

[Create table in Databricks SQL \| Databricks on AWS](https://docs.databricks.com/ingestion/add-data/index.html) [2022/6/29時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Databricks SQL上でクイックにCSVファイルをアップロードし、Deltaテーブルを作成することができます。

:::note info
**注意**
Azure Data Lake Storage Gen2、AWS S3、Google Cloud Storageのようなクラウドストレージからファイルをロードする方法に関しては、[COPY INTOのチュートリアル](https://qiita.com/taka_yayoi/items/9c90c28eef15a6d60169)を参照ください。
:::

# ターゲットテーブルのタイプ

Unity CatalogあるいはHiveメタストアにマネージドDeltaテーブルを作成することができます。

:::note info
**プレビュー**
Unity Catalogは[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。プレビューに参加するにはDatabricks担当者にご連絡ください。
:::

# 要件

- Unity CatalogでDatabricks SQLのテーブル作成を利用するには、[メタストア](https://docs.databricks.com/data-governance/unity-catalog/create-metastore.html)、[カタログ](https://docs.databricks.com/data-governance/unity-catalog/create-catalogs.html)、[スキーマ(データベース)](https://docs.databricks.com/data-governance/unity-catalog/create-schemas.html)が必要です。
    - Unity Catalogにおいては選択したスキーマが属するカタログに対する`USAGE`権限が必要です。
    - ワークスペースでUnity Catalogが有効化されている場合でも、Hiveメタストア内にスキーマを作成することができます。
- テーブルを作成するスキーマの`USAGE`、`CREATE`権限が必要です。
- 稼働中のSQLウェアハウスが必要です。

# CSVアップロードによるテーブルの作成

ローカルマシンから小規模なCSVファイルをDatabricks SQLにインポートすることで、Deltaテーブルを作成するためにUIを使用することができます。

- アップロードUIは100MB以下の一つのファイルにアップロードをサポートしています。
- ファイルはCSVで拡張子が`.csv`である必要があります。
- `zip`や`tar`のような圧縮ファイルはサポートされていません。

## ファイルのアップロード

1. ペルソナスイッチャーを用いてSQLペルソナに移動します。
    - ペルソナを変更するには、Databricksロゴ![](https://docs.databricks.com/_images/databricks-logo1.png)の下のアイコンをクリックしてペルソナを選択します。
1. サイドバーの![](https://docs.databricks.com/_images/create-button.png)**Create**をクリックし、メニューから**Table**を選択します。
1. Databricks SQLのテーブル作成ページが表示されます。
![](https://docs.databricks.com/_images/dropzone.png)
1. アップロードを開始するには、ブラウザボタンをクイックするか、ドロップゾーンに直接ファイルをドラッグ&ドロップします。
![](https://docs.databricks.com/_images/uploading.png)

    > **注意**
インポートされるファイルは、日次でガーベージコレクションされるあなたのアカウント内のセキュアな内部の格納場所にアップロードされます。

## テーブル名の選択

アップロードが完了すると、データの目的地を選択することができます。
![](https://docs.databricks.com/_images/catalog.png)

1. Unity Catalogが有効化されているワークスペースではカタログを選択することができます。ワークスペースでUnity Catalogが有効化されていない場合、カタログは非表示となり、Hiveメタストアからスキーマがロードされます。
    - Unity Catalogが有効化されたワークスペースでHiveメタストアを使用するには、カタログセレクターで`hive_metasotre`を選択します。
1. スキーマを選択します。
1. デフォルトでは、UIはファイル名を適切なテーブル名に変換します。テーブル名を変更することができます。

## データのプレビュー

ファイルアップロードが完了した後でデータをプレビュー(最大50行)することができます。

- アップロード後はUIが右上に選択されたウェアハウスを起動しようとします。任意のタイミングでウェアハウスを切り替えることができますが、プレビューとテーブル作成にはアクティブなウェアハウスが必要となります。ウェアハウスが起動していない場合、自動で起動します。これは少々時間を要します。ウェアハウスが稼働するとプレビューがスタートします。
![](https://docs.databricks.com/_images/preview.png)

- データをプレビューするには2つの方法、垂直あるいは水平があります。プレビューのオプションを切り替えるには、テーブル上部のトグルボタンをクリックします。
![](https://docs.databricks.com/_images/table-style.png)

## フォーマットのオプション

アップロードされたファイルフォーマットに応じて、異なるオプションを使用することができます。ヘッダーバーに一般的なフォーマットオプションが表示されますが、利用頻度の少ないオプションを**Advanced attributes**モーダルから使用することもできます。

- CSVに対しては、以下のオプションを使用することができます。
    - **First row contains the header**(デフォルトで有効): このオプションではCSVファイルにヘッダーが含まれているかどうかを指定します。
    - **Column delimiter**: カラムを区切る文字列です。1文字のみが許可され、バックスラッシュはサポートされていません。デフォルトはCSVファイルにおけるカンマです。
    - **Automatically detect column types**(デフォルトで有効): ファイルの中身から自動でカラムの型を検知します。プレビューテーブルで型を変更することができます。これがfalseに設定された場合、すべてのカラムは`STRING`と推定されます。
    - **Rows span multiple lines**(デフォルトで無効): ファイル内でカラムの値が複数行にまたがっているかどうかを指定します。

フォーマットオプションを変更するとデータプレビューは自動で更新されます。

## カラムのヘッダーと型

カラムのヘッダー名と型を編集することができます。
![](https://docs.databricks.com/_images/column-header.png)

- 型を変更するには、型を示すアイコンをクリックします。
- カラム名を変更するには、カラム上部の入力ボックスをクリックします。
    - カラム名ではカンマ、バックスラッシュ、(絵文字のような)unicode文字をサポートしていません。

CSVファイルにおいては、デフォルトでデータ型が推定されます。**Advanced attributes > Automatically detect column types**を無効にすることで、全てのカラムを`STRING`と解釈するようにすることもできます。

:::note info
**注意**
- スキーマ推定はベストエフォートでカラム型を検知します。カラムの型を変更することでターゲットのデータ型に適切にキャストできない場合、特定の値が`NULL`になる場合があります。`BIGINT`の`DATE`や`TIMESTAMP`へのキャストはサポートされていません。最初にテーブルを作成し、後でSQL関数を用いてこれらのカラムの変換を行うことをお勧めします。
- 特殊文字を含むテーブル名、カラム名をサポートするために、Databrikcs SQLのテーブル作成UIでは、[カラムマッピング](https://qiita.com/taka_yayoi/items/50c18bc9e48a31b22951)を活用しています。
- カラムにコメントを追加するには、テーブルを作成した後に[Data Explorer](https://docs.databricks.com/sql/user/data/index.html)に移動してカラムにコメントを追加してください。
:::

## サポートされるデータ型

CSVアップロードによるテーブル作成では、以下のデータ型をサポートしています。それぞれのデータ型の詳細については、[SQL data types](https://docs.databricks.com/sql/language-manual/sql-ref-datatypes.html)を参照ください。

| データ型 | 説明 |
|:--|:--|
|`BIGINT`   | 8バイトの符号付きinteger  |
|`BOOLEAN`   |ブール値(`true`, `false`)   |
|`DATE`   |タイムゾーンなしの年、月、日のフィールドから構成される値   |
|`DOUBLE`   | 8バイトの倍精度浮動小数値  |
|`STRING`  | 文字列  |
|`TIMESTAMP`   |セッションローカルのタイムゾーンなしの年、月、日、時、分、秒のフィールドから構成される値   |

## テーブルの作成

テーブルを作成するには、ページ下部にある**Create**をクリックします。

![](https://docs.databricks.com/_images/create-blue.png)

Databricks SQLのテーブル作成UIを用いてテーブルを作成した後は、指定されたカタログ、スキーマ配下に作成されたDeltaテーブルの[Data Explorer](https://docs.databricks.com/sql/user/data/index.html)ページが表示されます。

# 既知の問題

- `BIGINT`を`yyyy`のフォーマットの日付のようなキャストできない`DATE`型へキャストしようとするとエラーとなります。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)