はじめに
先日、以下の記事を発表しました。
新しいテクノロジーに触れる時はいつでも楽しいものです。
中でも新しいプログラミング言語(のパラダイム)を学ぶことは、特別に楽しいことです。
ということで、まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。
本稿情報のソースとして、下記ドキュメントを参照ください。
テーブルへのデータのロード
Kaskada はデータをテーブル形式で保持します。テーブルは複数の行で構成され、各行は同じ型の値です。
テーブルの詳細は、リファレンスの下記項目で確認できます。
Kaskadaのテーブルに、データをロードする前に、Kaskadaに対してテーブルを定義しておく必要があります。
テーブルにロードされるデータには、テーブル定義で使用されるすべての列が含まれている必要があります。(現時点では)テーブルにロードされるすべてのデータは同じスキーマを持つ必要があります。
さらに、次のことが期待されます。
- time 列 (およびデータセット内の他のすべての日時列) は、
timestamp
型にキャストできる型(たとえば、整数または RFC3330 形式の文字列) である必要があります。 - サブソート列が定義されている場合、エンティティ キー列、時間列、およびサブソート列の組み合わせにより、各行が一意である必要があります。
以下は、Parquet ファイルからKaskadaのテーブルに、データをロードする例です。
from kaskada import table
from kaskada.api.session import LocalBuilder
session = LocalBuilder().build()
table.load(
table_name = "Purchase",
file = "/path/to/file.parquet",
)
ここでは、Parquetファイルが使われています。Kaskadaで、サポートされるフォーマットについては後述します。
データをロードした結果(load
の戻り値)は、以下のようにdata_token_id
になります。
data_token_id: "aa2***a6b9"
データ トークン ID は、現在 Kaskada に保存されているデータへの一意の参照です。データ トークンにより反復可能なクエリが可能になります。同じデータ トークンに対して実行されるクエリは、常に同じ入力データに対して実行されます。
サポートされている形式
Apache Parquet は、効率的なデータの保存と取得のために設計されたオープンソースの列指向のデータ ファイル形式です。Parquetは、Kaskadaで扱うような大量のイベントデータの扱いに適しています。
from kaskada import table
from kaskada.api.session import LocalBuilder
session = LocalBuilder().build()
table.load(
table_name = "Purchase",
file = "/path/to/file.parquet",
)
Python ライブラリは、ファイルのパスの拡張子からファイルの形式を推測します。Parquet ファイル名は.parquet
で終わる必要があります。
CSV
カンマ区切り値 (CSV) ファイルは、値をカンマで区切る区切りテキスト ファイルです。ファイルの各行はデータ レコードです。
CSV ファイルには、ファイルのスキーマを推測するために使用されるヘッダー行が含まれている必要があります。CSV 型の推論は、データのロード時に行われます。スキーマは、最初の 1000 行を読み取ることによって推論されます。
from kaskada import table
from kaskada.api.session import LocalBuilder
session = LocalBuilder().build()
table.load(
table_name = "Purchase",
file = "/path/to/file.csv",
)
Python ライブラリは、ファイルのパスの拡張子からファイルの形式を推測します。CSV ファイル名は.csv
で終わる必要があります。
ファイルの場所
Kaskada は、さまざまな種類のファイル ストレージからのファイルのロードをサポートしています。ファイル ストレージ システムは、ファイル パス プロトコル プレフィックス (たとえば、file:
または s3:
)を使用して指定されます。
ローカルストレージ
file:
プロトコルを使用してローカル ディスクからデータをロードできます。ディスクからロードする場合、ファイル パスは Kaskadaサービスからアクセスできる必要があります。
リモート Kaskada サービスを使用する場合、ローカル ストレージは推奨されません。
AWS S3ストレージ
s3:
プロトコルを使用して、AWS S3 (または Minio などの互換ストア) からデータをロードできます。S3 から非公開オブジェクトをロードする場合は、Kaskada サービスに認証情報を設定する必要があります。資格情報は環境変数を使用して構成されます。
次の環境変数は、資格情報の構成に使用されます。
-
AWS_ACCESS_KEY_ID
: AWS 認証情報キー。 -
AWS_SECRET_ACCESS_KEY
: AWS 認証情報のシークレット。 -
AWS_DEFAULT_REGION
: 指定されていない場合に使用する AWS S3 リージョン。 -
AWS_ENDPOINT
: 接続先の S3 エンドポイント。 -
AWS_SESSION_TOKEN
: セッショントークン。セッション トークンは、IAM ロールを引き受けることによって作成された認証情報に必要です。 -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
: 詳細は、左記ページ参照 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html -
AWS_ALLOW_HTTP
: TLS を使用しない HTTP 接続を許可するには、「true」に設定します。
GCP GS ストレージ
gs:
プロトコルを使用して GCP GS からデータをロードできます。AWS S3 ストレージ構成と同様に、Kaskada サービスは認証情報を使用して構成する必要があります。
次の環境変数は、資格情報の構成に使用されます。
-
GOOGLE_SERVICE_ACCOUNT
: サービス アカウント ファイルの場所 -
GOOGLE_SERVICE_ACCOUNT_PATH
: (エイリアス) サービス アカウント ファイルの場所 -
SERVICE_ACCOUNT
: (エイリアス) サービス アカウント ファイルの場所 -
GOOGLE_SERVICE_ACCOUNT_KEY
: JSON でシリアル化されたサービス アカウント キー