Atsushi2022の日記

データエンジニアリングに関連する記事を投稿してます

2024-01-01から1年間の記事一覧

Docker パーサーディレクティブ

Parser directive Parser directiveの実体はDockerfileの先頭行に記述する特殊なコメントで、Dockerfileの後続行の処理方法に影響する。 syntaxとescapeの2種類のパーサーディレクティブが存在する。 syntax 実はDockerfile 内で使用される構文は交換可能で…

Docker マルチステージビルド

Multi-stage builds 要は複数のFROMを使用したビルドのこと。各FROM句により新しいビルドステージが始まる。 COPYにより、前のステージから新しいステージに必要なビルド作成物(アーティファクト、要はファイルのこと)のみコピーすることで、最終イメージ…

Docker ビルドコンテキスト

Build context Local context 最初に学ぶビルドはdocker build .だろうと思う。これは「Local context」と呼ばれる。Dockerはカレントディレクトリ.を参照し、取り込む。 local_context 標準入出力からビルドするケースや、tarファイルからビルドするケース…

Docker ベストプラクティス

Dockerのベストプラクティスについて調べたことをまとめる。 一般的なガイドライン ベースイメージのバージョンを固定する。ダイジェスト参照を使用するとなお良し ビルドキャッシュを活用する RUNでバックスラッシュを使用して、引数を複数行に並べる アプ…

BigQueryのFORループでデータセットの全テーブルに対してクエリを投げる

複数のテーブルのレコード件数を表にまとめたいことがたまにある。 そういう時はFORループを使用して、count(*)した結果を一時テーブルに入れて確認したりする。 DECLARE dataset STRING DEFAULT "test_dataset"; CREATE OR REPLACE TEMP TABLE record_count…

BigQuery INFORMATION_SCHEMAのアクセス権限

INFORMATION_SCHEMAのビューを使用して、テーブルやカラムの情報を取得して、テーブル作成などに使用することが多いけれど、INFORMATION_SCHEMAビューにアクセスするのに権限が必要なことは知らなかった。 権限を持っていないと、SELECTしても次のようなエラ…

PythonでのEnum

標準ライブラリにあるEnumクラスにより、Enumを使用することができる。 列挙型は定数を表すために使われるため、Enumのメンバの名前は大文字にすることが推奨される。 次のコードで挙動を確認することができる。詳細については列挙型 HOWTOにわかりやすくま…

管理すべきメタデータ、データ品質テスト

管理すべきメタデータ メタデータはビジネスメタデータ、テクニカルメタデータ、オペレーションメタデータの3種類に分けられる。 具体的には次のようなデータがある。 ビジネスメタデータ テーブルのオーナー テーブルのパーティションに使用されるカラム カ…

BigQuery関連で面白かったブログ・動画 4選

1. I spent 3 hours figuring out how BigQuery inserts, deletes and updates data internally. Here’s what I found. ライトノベルのようなタイトルですね。BigQuery内部でどのようにファイルを管理しているかキレイな図で紹介してくれてます。 データを挿…

BigQueryでのNULLのソート

BigQueryでORDER BY句を使用する場合、デフォルトのNULLの順序はASCかDESCで異なる。ASCの場合はNULLが最初に来るし、DESCの場合はNULLが最後に来る。 NULLS FIRST is applied by default if the sort order is ascending. NULLS LAST is applied by default…

MySQLが遅い時に参考にしたサイト一覧

概要 EmbulkでMySQLからデータを抽出しようとしたら遅かったので、関連となるトピックを色々調べた。とりあえず参考リンクだけ貼っておく。 クエリ処理の流れ (Oracle) SQLの処理 (SQL Server) SELECT ステートメントを処理する <非公式> MySQL Logical Arch…

Dataplexで外部キー制約を満たしているかのデータ品質チェック

BigQueryの外部キー制約は強制適用されないため、外部キー参照先の値(またはNULLのみ)しか入らないようにユーザー側で管理する必要がある。 そこでDataplexを使用して定期的に外部キー制約に沿った値になっているか確認できないかと考えた。 調べたところ…

BigQueryのPRIMARY KEYは強制適用されない

まったく知らなかったけど、BigQueryの主キー/外部キー制約は強制適用されない。。。 これは知らないと割と事故りそう。 わい)主キー設定したし、NULLだったらエラーになってくれるよねー。NULLが入らないから安心だな~ BigQuery)NULLでもオレ、全然いい…

BigQueryで全行削除するときはDELETEを使う

BigQueryでは全行削除するときはDELETEを使った方が良い。 Timetravelで復元もできるし、DELETEより早いし、お金もかからない。 BigQuery公式 When performing a DELETE operation to remove all the rows from a table, use TRUNCATE TABLE statement inste…

SQLでの計算量(Big O)

O(1) オーダー テーブルから任意の1行を取り出す SELECT TOP 1 * FROM table; O(log N) オーダー インデックスが張られた列に対してのWHERE句による抽出 O(log N)なので、テーブルサイズが大きくなっても、あまり時間計算量は増えない O(N) オーダー 以下の…

BigQuery、比較演算子でNULLを比較

BigQueryで、比較演算子で比較される対象のどちらかがNULLだと結果はNULLになる。以下のクエリの結果はどちらもNULLになる。 SELECT CAST(NULL AS INT64) < 1; SELECT CAST(NULL AS INT64) = CAST(NULL AS INT64); 以下の例だとNULL行と今日の日付の2行が存…

BigQueryでのDELETE-INSERTは、MERGE ~ ON FALSEで行う

BigQueryでDELETE-INSERTしたい場合、 MERGE ~ ON FALSE WHEN NOT MATCHED BY SOURCE THEN DELETE WHEN NOT MATCHED BY TARGET THEN INSERT ROW を使用すると良い。DELETE-INSERTを行えるうえ、動作も早いらしい。 ON FALSEとすることで、NOT MATCHED BY SOU…

SQLのBig Oに関するブログ記事

medium.com www.datacamp.com www.kdnuggets.com www.kdnuggets.com

BigQueryの外部テーブルでの allow_quoted_newlines オプション

BigQueryの外部テーブルでの allow_quoted_newlines オプション BigQuery で CSV ファイルから外部テーブルを作成する場合は、オプションが不足していないか確認してください。 ある日、元の CSV ファイルのフィールドの 1 つに引用符で囲まれた改行文字が含…

IntelliJの初期設定

概要 IntelliJの設定項目を忘備としてメモしておく。 主に使うのはTerraformとPythonなのでそのあたりの設定。 Git Toolboxが超便利。 設定項目 Plugins File Watchers Git ToolBox Terraform and HCL File Watchersへの設定 terraform fmt flake8(カスタム…

IntelliJでの複数カーソルによる文字列選択

概要 IntelliJで複数カーソルの使用方法を調べてみた。特に、覚えておくと重宝しそうなものに絞ってメモしておく。 覚えておきたい複数カーソル操作 キーボードを使用して現在のカーソルの上または下にカーソルを追加 Shiftを押しながら上下↑↓キーを押す そ…