よしたく blog

ほぼ週刊で記事を書いています

【Dataform】pre_operationsを使ってdelete insertを実現する方法

Dataform では incremental モードを使ってデータを積み上げていくことができます。 しかし、データを積み上げていくことのみしか出来ず、仮に一度実行した処理を再度実行すると同じデータがシンク先に書き込まれます。 要はDELETE INSERT には対応していな…

DataformCLIの2系を使ってBQに接続するまでの手順

2024 現在の Dataform は、Dataform 3 系の開発とttps://docs.dataform.co/(存在しない URL)にあった Docs の移行がおこなわれている。 最近 2 系の Docs にすぐ当たれない体験が増えてきたので、備忘録として残しておくー。 今回は Dataform CLI を使って…

supabaseで全件削除するための小技

supabase の Python ライブラリであるsupabase-pyでは、2024-03-06 時点で全件削除できるような実装はないらしい。 そこで擬似的に全件削除のようなことをしたいときにはひと工夫する必要がある。 supabase.com 削除するときのフィルター条件でneqを使って、…

Google Cloud Next Tokyo ’23 Day2に行った📝

DMM における AWS から BigQuery へのデータ基盤移行 / 合同会社DMM.com 背景 1500テーブル ほぼ日時処理 biから投げられる30000クエリ/ week 1500mau 新規テーブル・カラムの別作業が5回/week 課題 オペの省力化ができていないため、活用拡大にリソースを割…

Google Cloud Next Tokyo ’23 Day1に行った📝

基調講演 ハルシレーションを抑えるグラウンディングをし、事実に基づく生成AIにする Vertexがより協力になっていく話 Garden Codey 企業独自のコードベースから、出力をチューニングしてくれる https://zenn.dev/cloud_ace/articles/20230609codeyapisprevi…

gcloud auth loginとapplication-default loginの違いを整理した

記事の概要 Google Cloud SDKの認証コマンド、`gcloud auth login` と `gcloud auth application-default login` の違いについてまとめた。 gcloud auth login 目的 `gcloud` コマンドラインツールを使用するユーザー自身を認証するためのコマンドになる。 …

転職して1年を振り返る

はじめに 2022の振り返りと称した、半年の振り返りはこれになる。 yoshitaku-jp.hatenablog.com 1年間での主な業務と成果 主に - ETL処理を組む - バッチ処理の面倒をみる - 集計依頼に対応する - データ基盤の速度改善 - データ基盤のコスト削減 を実施して…

one secアプリがSNSの時間消費抑えに良かった

SNSの時間を抑えたいなと思っていたところone secにたどり着き、使ってみたところとても良かったので紹介します。 tl, dr SNSの時間消費にone secがよかった 対象のアプリが起動すると、one secの妨害が始まる 妨害のカスタマイズもできる one sec とは one …

GitHub ActionsでSQLFluffを実行する

SQLのLinterであるSQLfluffをCI /CDで回したかったので、GitHub Actionsで試してみた。今回は PR上でCIが回る checkout時のデータ量削減で、fetch-depth: 1の設定 リポジトリ内の全てのSQLファイルにLinterを実行するため、find . -name '*.sql' -type f | x…

BigQueryのメタデータからDDL文を確認する

BigQueryのメタデータからDDL文を確認する方法を調べた。以前、過去に作ったテーブルのDDL文がわからず困った時に役立った。 INFORMATION_SCHEMA.TABLESのddlカラムにDDL文が存在している。 SELECT table_name, ddl FROM `<project_id>.<dataset_name>.INFORMATION_SCHEMA.TABLES` WHER</dataset_name></project_id>…

【Python】ETLツールのLuigiをさわってみた

前回に引き続き、ETLツールをいろいろさわってみたいと思ったところから、今回はPython製のETLツールLuigiをさわってみた。 インストール pip install luigi バージョン確認 $ python --version Python 3.9.1 luigi 3.2.0 サンプルコード import luigi class…

【Python】ETLツールのPrefectをさわってみた

ETLツールをいろいろさわってみたいと思って、Python製のETLツールPrefectをさわってみた。 インストール pip install prefect バージョン確認 $ python --version Python 3.11.1 $ prefect --version 2.8.3 サンプルコード Prefect公式で提供されている「We…

Gitで空のコミットを作る

Git

チームメンバーへの共有の意味を兼ねてプルリクエストを作り、作業を始める前の作業想定やメモなどを書きたい時があった。しかし、そのプルリクエストを作るために、何かしら作業をしてコミットとプッシュをしなければいけなくなってしまうというジレンマも…

BigQueryの予約語のページ

BigQueryの予約語を調べてもなかなか公式ドキュメントに辿り着けず悲しかったので自分のブログにリンクする 予約済みのキーワード https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical?hl=ja#reserved_keywords 2023-02-08

【Google Colab】ログインしたGCPからログアウトする

Google ColabからGCPへログインした後、ユーザを切り替えたいなどの理由でログアウトしたいときに実行する方法です。 gcloudのrevokeコマンドを使ってログアウトする ! gcloud auth revoke Google Colabのランタイムを終了させる from google.colab import r…

【Google Colab】GCPへログインする

Google ColabからGCPへアクセスしたい場合は、次のコードを実行するとGoogleアカウントへのログインフォームが出てきます。 ログインが完了すると、Google Clund SDKのリクエスト確認の画面へ移動し、「許可」をクリックします。 次に認証用コードが発行され…

【Google Colab】%%writefile でセルの内容をファイルに書き出す

セルの内容をファイルに書き出す マジックコマンドの%%writefileを使うことでセルの内容を書き出す事ができる。 %%bash ls sample_data %%writefile sample.txt test1 test2 %%bash ls sample_data sample.txt %%bash cat sample.txt test1 test2 セルの内容…

【VS Code】Edit CSVを使って、ExcelライクにCSVを編集する

VS Code拡張機能のEdit CSVがとても便利だったので紹介する。 概要 Edit CSVはVS codeの拡張機能で、CSVファイルをExcel操作のように編集することができる。 紹介ページにも、次のように書いてある。 This extensions allows you to edit csv files with an …

2022 振り返り

いまさらとなってしまったが、2022年の振り返りをする。 ## 仕事 2022で自分の一番大きな変化といえば転職になる。7月までSIerでデータエンジニアの仕事をし、1ヶ月間有給消化後、9月から引き続きデータエンジニアとして事業会社で仕事をしている。 転職する…

GROUP BYで範囲を集計する

SQL

SQL の GROUP BY を使うとカラムのデータごとに集計できる。 例えば次のようなデータがあり、GROUP BY を使って SQL を実行する。 実行環境はsqlfiddleで、MySQL5.6を使った。 sqlfiddle.com データはテストデータ生成サイトで作った。 https://tm-webtools.…

Pythonのtranslateを使った文字の置換

Python のtranslateメソッドを使うとmaketransメソッドから生成される変換表を元に文字を置換できる。 https://docs.python.org/ja/3/library/stdtypes.html?highlight=str%20replace#str.translate https://docs.python.org/ja/3/library/stdtypes.html?hig…

SQLをlintする SQLFluff に入門した

プロジェクトの中で SQL を使い ETL 処理を書いていたが、個人によって書き方にばらつきがあり、他人の SQL を確認したりメンテナンスするタイミングがとてもつらかった。 SQL もフォーマッタや linter を使って、少しでも作業しやすくしたいと思って探して…

Pandasでインデックス指向のJSONを読み込む

Pandas で JSON の key となる部分がインデックス指向*1となっているJSONを読み込ませたい場合、read_JSON()関数にorient='index'オプションを設定すればうまくいく。 pandas.pydata.org サンプルデータ { "0": { "name": "Nieves Finch", "gender": "male",…

chunksizeを指定して、pandasで巨大ファイルを扱う

pandas でサイズの大きなファイルを扱うにはどうすればいいか調べたところ、ファイルを読み込む際に chunksize 引数を指定して、分割して読み込む方法があることを知った。 Google clab にあるサンプルファイルを使って動きを確認する。 まずは何も指定せず…

pipenvでpipenv install throws --system is intended to be used for pre-existing Pipfile installationが発生したときの解決方法

pipenvを触り始めて試行錯誤していたら環境を壊してしまったようで、同名のフォルダを再作成してもうまくいかず、pipenv install throws --system is intended to be used for pre-existing Pipfile installationが発生した。 まずはpipenv --venvで仮想環境…

Pythonの%timeで出力される値の見方

Pythonの%timeで出力される値の見方を調べたので、メモしておく。 yoshitaku-jp.hatenablog.com CPU times: user 14 µs, sys: 0 ns, total: 14 µs Wall time: 19.1 µs と表示されているとき、 Wall time: 19.1 µsは全体の実行時間を表している。 CPU times: …

Jupyter Notebookでコードの速度を計測するtimeとtimeit

Jupyte Notebook でコードの速度を計測する方法にマジックコマンドとして用意されている、timeと timeitを使う方法がある。 この 2 つの存在は知っていたが、 time と timeit で何が違うのか %の数が 1 つのときと 2 つのときで何が違うのか がわからなかっ…

Pandasで欠損値を埋めるための方法

Pandasで欠損値を埋めるための方法をいくつか確認したのでまとめておく。fillna関数を使うと引数に渡した値で、NaNを埋められる。 まずは適当にNaNを含んだデータを生成する。 import numpy as np import pandas as pd df = pd.DataFrame(data=[1,2,4,np.nan…

PythonのCounterクラスを使って要素の出現回数を集計する

Pythonでは、よく使われる組み込みコンテナの dict、list、set、tuple に代わる特殊なコンテナがあり、collectionsモジュールにまとまっている。今回はその中にある辞書型のサブクラスであるCounterを使ってリストなどの要素の出現回数を数え、簡単に集計を…

7月よりブログ更新を再開します

7月より週1でのブログ更新を再開します。と言う宣言です。 集中して取り組みたいことがあり、こっそり5,6月と休んでおりました。 その中で改めてブログに助けられたことがあり、休みつつも「落ち着いたら再開しよう!」という気持ちが高まっておりました。 …