Treasure DataのCLIをGoで実装
Treasure DataのCLIとしてTD Toolbeltが提供されています。
基本的な機能はこのCLIで動作するのですが、ベースになっているtd-client-rubyが対応していないAPIも多い事もあり、CDP関連だったりPolicyだったりの対応ができていないものになります。
またToolbeltでは対応していないAPI(workflowがそうですね)については、digdagのjarを入れる必要があります。セキュリティが厳しい企業の場合はこれが問題になることもあります。
APIが公開されているのでそれを使えば良いのですが、毎度認証情報を設定して実行するのも面倒だなという事でCLI Toolを作ることにしました。Claude Codeって良いですね。
機能
大体のAPIについて機能を実装しています。
Policy、Workflow、CDPについても機能が追加されています。
tdcli -h
Usage: tdcli <command> [flags]
Treasure Data CLI Tool
Flags:
-h, --help Show context-sensitive help.
--api-key=STRING Treasure Data API key (format: account_id/api_key) ($TD_API_KEY)
--region="us" API region (us, eu, tokyo, ap02)
--format="table" Output format (json, table, csv)
--output=STRING Output to file
-v, --verbose Verbose output
--insecure-skip-verify Skip TLS certificate verification ($TD_INSECURE_SKIP_VERIFY)
--cert-file=STRING Client certificate file path ($TD_CERT_FILE)
--key-file=STRING Client private key file path ($TD_KEY_FILE)
--ca-file=STRING Custom CA certificate file path ($TD_CA_FILE)
Commands:
version Show version
config show Show current configuration
config set Set configuration value
config get Get configuration value
config init Initialize configuration file
trino query (q) Execute a Trino query
trino interactive (i,repl) Start interactive Trino session
trino test Test Trino connection
trino describe (desc) Describe a table
trino show Show schemas, tables, or columns
trino explain Explain query execution plan
trino version Show Trino version
Run "tdcli <command> --help" for more information on a command.
認証情報の設定について
tdcli config init
を使うと該当のディレクトリの下にconfigが作成されます。
--global
optionを使うとglobal configが作成できます。
tdcli config init -h
Usage: tdcli config init [flags]
Initialize configuration file
Flags:
-h, --help Show context-sensitive help.
--api-key=STRING Treasure Data API key (format: account_id/api_key) ($TD_API_KEY)
--region="us" API region (us, eu, tokyo, ap02)
--format="table" Output format (json, table, csv)
--output=STRING Output to file
-v, --verbose Verbose output
--insecure-skip-verify Skip TLS certificate verification ($TD_INSECURE_SKIP_VERIFY)
--cert-file=STRING Client certificate file path ($TD_CERT_FILE)
--key-file=STRING Client private key file path ($TD_KEY_FILE)
--ca-file=STRING Custom CA certificate file path ($TD_CA_FILE)
--global Create global config (~/.tdcli/.tdcli.toml)
コマンド体系について
基本的にサブコマンドにそれぞれのAPIの機能が追加されています。
例えばworkflowについては以下のような形です。
tdcli wf
Usage: tdcli workflow (wf) <command> [flags]
Workflow management
Flags:
-h, --help Show context-sensitive help.
--api-key=STRING Treasure Data API key (format: account_id/api_key) ($TD_API_KEY)
--region="us" API region (us, eu, tokyo, ap02)
--format="table" Output format (json, table, csv)
--output=STRING Output to file
-v, --verbose Verbose output
--insecure-skip-verify Skip TLS certificate verification ($TD_INSECURE_SKIP_VERIFY)
--cert-file=STRING Client certificate file path ($TD_CERT_FILE)
--key-file=STRING Client private key file path ($TD_KEY_FILE)
--ca-file=STRING Custom CA certificate file path ($TD_CA_FILE)
Commands:
workflow (wf) list (ls) List workflows
workflow (wf) get (show) Get workflow details
workflow (wf) create Create a new workflow
workflow (wf) update Update workflow
workflow (wf) delete (rm) Delete workflow
workflow (wf) start (run) Start workflow execution
workflow (wf) init Create a sample workflow project
workflow (wf) attempts (attempt) list (ls)
List workflow attempts
workflow (wf) attempts (attempt) get (show)
Get attempt details
workflow (wf) attempts (attempt) kill
Kill running attempt
workflow (wf) attempts (attempt) retry
Retry failed attempt
workflow (wf) schedule get (show) Get workflow schedule
workflow (wf) schedule enable Enable workflow schedule
workflow (wf) schedule disable Disable workflow schedule
workflow (wf) schedule update Update workflow schedule
workflow (wf) tasks (task) list (ls)
List workflow tasks
workflow (wf) tasks (task) get (show)
Get task details
workflow (wf) logs (log) attempt Get attempt log
workflow (wf) logs (log) task Get task log
workflow (wf) projects (project,proj) list (ls)
List workflow projects
workflow (wf) projects (project,proj) get (show)
Get project details
workflow (wf) projects (project,proj) create
Create a new project
workflow (wf) projects (project,proj) push
Push project from directory (alias for create)
workflow (wf) projects (project,proj) download
Download project archive and extract to directory
workflow (wf) projects (project,proj) workflows (wf)
List workflows in project
workflow (wf) projects (project,proj) secrets (secret) list (ls)
List project secrets
workflow (wf) projects (project,proj) secrets (secret) set
Set project secret
workflow (wf) projects (project,proj) secrets (secret) delete (rm)
Delete project secret
workflow (wf) projects (project,proj) hooks (hook) show (ls,list)
Show hooks configuration
workflow (wf) projects (project,proj) hooks (hook) init
Initialize hooks configuration file
workflow (wf) projects (project,proj) hooks (hook) add
Add a new hook
workflow (wf) projects (project,proj) hooks (hook) remove (rm)
Remove a hook
workflow (wf) projects (project,proj) hooks (hook) test
Validate hooks configuration
気に入ってる機能
Trinoと対話的にクエリが書ける機能
psqlのようにTreasure DataのTrinoとinteractiveにQueryをかける機能を追加しました。
❯ tdcli trino i
trino:sample_datasets> select * from www_access;
host path method referer code agent user size time
---- ---- ------ ------- ---- ----- ---- ---- ----
212.201.217.44 /category/jewelry GET - 200 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) -105 1412326786
188.162.87.188 /item/software/1134 GET /category/software 200 Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) - 118 1412326770
204.36.47.69 /category/finance GET /category/toys 200 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS122159; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; BRI/2) -122 1412326754
24.135.92.177 /search/?c=Electronics+Electronics POST - 200 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7 - 124 1412326737
最後に
Claude Codeのおかげで面倒な作業から解放されながらある程度形にできた、という気はします。
ありがたいですね。
あとこれは非公式のCLIです。
何か問題があっても公式には聞かないでください。直してほしいものや追加してほしい昨日があればIssueを立てるかPRを送ってください。
Discussion