blogsyncからのテスト
テスト。 post のためのテスト。
macOS (10.15) に presto (0.227) をインストールした
諸事情で presto
の関数の挙動を調べたいと思ったので、ローカルに環境構築しました。
図示すると下図
で、やりたいことの割に色々やることと、引っかかる箇所が多かったので記録を残しておきます。
環境は
です。
presto のバックエンドに利用するデータベースのインストール
presto 単体だと presto サーバの JMX しか接続先がないので、先にバックエンドになるデータベースのインストール。
今回は MySQL を homebrew でインストール。
$ brew install mysql
また、このままだとデータがない状態なので、外部からCSVをロードします。
LOAD DATA LOCAL
構文で一括インストールしようとしたのですが、MySQL 8 から Server-Client 共にオプションを付与しないと利用できないようになっていました。
ということで、サーバ、クライアント共に対応をします。
MySQL サーバ側
設定ファイルを変更してもいいのですが、何度もデータをロードしないので、DBに接続して設定を変更します
-- オプション設定 mysql> SET PERSIST local_infile = 1 Query OK, 0 rows affected (0.00 sec) -- オプション設定確認 mysql> SELECT @@local_infile; +----------------+ | @@local_infile | +----------------+ | 1 | +----------------+ 1 row in set (0.00 sec)
MySQL クライアント側
MySQL 付属の mysql-client であれば --local-infile=1
オプションを付けてコネクションを張ればよいのですが、JDBCを使ったクライアントソフトを使っているので公式の
を参照して
allowLoadLocalInfile Should the driver allow use of 'LOAD DATA LOCAL INFILE...'? Default: false Since version: 3.0.3
が該当するので、 allowLoadLocalInfile=true
をセットしました。
Java 1.8のインストール
presto の requirements を確認すると
Java 8, 64-bit
となっていました。macOS にインストールされていたのも 8 ではありましたが、アップデートバージョンが不足しており、インストールが必要になりました。
すでに Oracle 配布の Java 8 は homebrew 他で配布されていないので、 homebrew cask を使って 3rd Party の JDK 8 互換の JDK をインストールします。
$ brew cask install adoptopenjdk8
この後、環境変数の JAVA_HOME を変更して、 presto が使う Java のパスを変更します。
$ export JAVA_HOME=`/usr/libexec/java_home -v "1.8"`
これで Java の準備は完了。
presto のインストール
homebrew だと
- prestodb
- prestosql
があり、排他的なインストール制限があったので、今回は prestodb のパッケージの方をインストールしました。
$ brew install prestodb
ここは特に問題なし。
presto の MySQL カタログの追加
このままだと presto が使う MySQL の情報がないので公式ドキュメント
にしたがって、設定ファイルを作成します。今回 presto を homebrew でインストールしているので /usr/local/Cellar/prestodb/<バージョン番号>/libexec/etc/catalog/mysql.properties
にファイルを作成します
connector.name=mysql connection-url=jdbc:mysql://localhost:3306 connection-user=<USER_NAME> connection-password=<PASSWORD>
MySQL サーバの起動
brew info に書かれているように
$ mysql.server start
で起動
presto サーバの起動
以下コマンドを実行。 ( 8080
ポートを使うので他で利用している場合は変更)
$ presto-server run
presto クライアントの接続
以下コマンドを実行
$ presto --server localhost:8080 --catalog mysql
成功すると
presto>
と入力待ちの状態になります。
presto のクエリの実行
前までの手順で入力待ちの状態になっているのでクエリを実行します
# データベースを選択 presto> USE presto_test; USE # テーブルの確認 presto:presto_test> SHOW TABLES; Table ----------- pageviews (1 row) Query 20191108_163558_00001_b98d2, FINISHED, 1 node Splits: 19 total, 19 done (100.00%) 0:02 [1 rows, 30B] [0 rows/s, 15B/s] # presto の独自関数 url_extract_path を含むクエリの実行 presto:presto_test> SELECT url_extract_path(url) FROM pageviews LIMIT 5; _col0 -------------------- url /entry/20061110/p4 /entry/20120407/p1 /entry/20130601/p1 /entry/20060731/p1 (5 rows) Query 20191108_163701_00002_b98d2, FINISHED, 1 node Splits: 34 total, 34 done (100.00%) 0:00 [366 rows, 0B] [820 rows/s, 0B/s]
問題なく実行できたようです。
じぶん Release Notes (ver 2019.08)
所用で書くのすっかり忘れていたけれどバックデート。
技術・開発関連
- ver 2019.07 〜 ver 2019.08 でできた技術的取り組みは特にない気がします。よくない (2ヶ月連続)
- 年始からやってた仕事がようやく幕かと思ったら、また険しい非技術の仕事がきて今月も停滞しそうな雰囲気
イベント
- 休日出勤もあって映画館にも行ってない。どうにか余暇を持ちたい
本
夏休みということもあってセールが複数回あったので色々書いました。シリーズ物は最新刊だけ、買ったけど読んでないものは割愛。
読んでいる
わけがわかる機械学習
わけがわかる機械学習 ── 現実の問題を解くために、しくみを理解する
- 作者:中谷 秀洋
- 発売日: 2019/08/28
- メディア: 単行本(ソフトカバー)
わけがわかりたくて
SQLの苦手を克服する本 データの操作がイメージできれば誰でもできる
新人に教える用に
日英インテリジェンス戦史
日英インテリジェンス戦史: チャーチルと太平洋戦争 (ハヤカワ・ノンフィクション文庫)
- 作者:小谷 賢
- 発売日: 2019/08/06
- メディア: 文庫
コンピュータサイエンス、実質、第二次世界大戦の軍事・諜報を端に発しているので
教養としての「世界史」の読み方
- 作者:本村 凌二
- 発売日: 2016/12/17
- メディア: 単行本(ソフトカバー)
教養をつけたいので
PLAY WORK プレイ・ワーク 仕事の生産性がグングン高まる「遊びながら働く」方法
PLAY WORK プレイ・ワーク 仕事の生産性がグングン高まる「遊びながら働く」方法
- 作者:ピョートル・フェリクス・グジバチ
- 発売日: 2019/07/24
- メディア: 単行本
やりたい事を仕事にできればいいよねという話
読み終わった
- 作者:灰原 薬
- 発売日: 2019/07/09
- メディア: コミック
- 作者:岩明 均
- 発売日: 2019/07/23
- メディア: コミック
AIの遺電子RED QUEEN(5)完 (少年チャンピオン・コミックス)
- 作者:山田胡瓜
- 発売日: 2019/08/08
- メディア: コミック
- 作者:本村 凌二
- 発売日: 2018/03/20
- メディア: 単行本
データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理
- 作者:Martin Kleppmann
- 発売日: 2019/07/18
- メディア: 単行本(ソフトカバー)
買い物
- 夏の暑さで週2で洗濯しても(毎日洗濯してないのが一人暮らしの無精)寝具カバーが厳しい状態になったので買い換えた
- 快適さにはもう少し投資額を高めるべきかも
ブログ
改訂2版『みんなのGo言語』を読みました。主な内容はレポジトリ側に書いてるので、あまりエントリ自体がしっかりしていないのが悩みどころ
仕事
- ほとんどトラブル対応に追われていました (ただ、今月で完了予定)
- 19年新卒向けの研修を2回しました (完了)
- 調整事を本職にルーティングしたい
この期間の振り返り
Keep
- 過食を抑えてカロリー制限
- 平日朝昼はキープできていたが、夜が遅くなるとほとんど食べない/遅くに食べるとコンビニ食 or ラーメンでダメ
- 残念ながら毎日仕事で遅くなって平日我慢した分、毎週末飲みに行っていた
- 毎日運動と筋トレ
- 運動の方が毎日遅く帰ることになったことに伴ってできず
- 筋トレはプランクなど、腹筋中心で
- 9月で年始からの仕事が一つ終わるので締めにかかりたい
Problem
- 業務上で技術新トピックにあまり触れられていない
- 平日の帰りが慢性的に遅いと諸々スケジュールが狂うので困っている
Try
- 特になし (一旦忙しいのを落ち着くまで頑張りたい)
改訂2版 『みんなのGo言語』を読んだ
『改訂2版 みんなのGo言語』を7/25の某書店の先行発売で買って今日読み終わりました。盆休み他なく、カレンダー通りに働いていて1ヶ月程度かかりました。読書メモとコードスニペットは以下のレポジトリにコミットしてあります。
仕事であまりGo言語を使う機会がなく、だいぶ忘れがちになっていたのですが、よい復習の機会になりました。
読み返していて思ったのですが、Go言語の特性であるgorutineを使ったコードをいまだにほとんど書いたことがないなと。CLIくらいしか書いておらず、もう少し幅があるようにしたいなとは思いました。
また、 go module
への対応など、比較的最近のトピックも把握できてよかったです。
内容によっては書かれてから時間が置かれたものや、コードスニペットにしたさいに簡略化した関係でうまく動かなくなっているものもあっていくつか公式のお問い合わせからフィードバックしてみました。
現状盆休みも重なって更新止まっているようですが、気が付いたところはフィードバック出していこうと思います。
じぶん Release Notes (ver 2019.07)
技術・開発関連
ver 2019.06 〜 ver 2019.07 でできた技術的取り組みは特にない気がします。よくない。
イベント
多忙で休日も出かけてません。
本
読んでいる
早売りで購入して読んでいるところ。順当にアップデートされていてためになる。業務ではGo言語使わなくなってしまったので半ば趣味。
データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理
- 作者:Martin Kleppmann
- 発売日: 2019/07/18
- メディア: 単行本(ソフトカバー)
去年英語版で読んだけれど、日本語だとまた細かいところの理解度が変わって理解度が上がっている気がする。
読み終わった
Upheaval: Turning Points for Nations in Crisis (English Edition)
- 作者:Diamond, Jared
- 発売日: 2019/05/07
- メディア: Kindle版
実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~
- 作者:吉井 健文
- 発売日: 2019/06/26
- メディア: 単行本(ソフトカバー)
分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
- 作者:Brendan Burns
- 発売日: 2019/04/20
- メディア: 単行本(ソフトカバー)
- 作者:島本 和彦
- 発売日: 2019/07/12
- メディア: コミック
買い物
特になし。そろそろバックパックの背当て部分のすり減りが気になってきたので、同じモデルで買い換えようか検討中。
ブログ
Release Notes 除き書いていません。
仕事
- ほとんどトラブル対応に追われていました。
- 19年新卒向けの研修を2回しました
- 本職責ではないはずだが、調整作業が多すぎるので、本職にパスできるようにしたい
この期間の振り返り
Keep
- 過食を抑えてカロリー制限
- 毎日運動と筋トレ
- 8月に新人研修向けのタスクが増えるので、それに備える
Problem
- 業務上で技術新トピックにあまり触れられていない
Try
- 特になし
じぶん Release Notes (ver 2019.06)
技術・開発関連
ver 2019.05 〜 ver 2019.06 でできた技術的取り組みは以下です。
- 既存パブリッククラウド環境の Terraform 化を考えて GoogleCloudPlatform/terraformer を試してみた、が、Terraform力が低すぎて、auto generate された
.tf
ファイルがどの程度使えるのかが分からず、Terraform の勉強をする必要があると感じた - やむを得ない事情でGoogle Data Portal の Community Connector をいくつか作った
イベント
梅雨になって雨がちで外出あまりできず。
本
読んでいる
Upheaval: Turning Points for Nations in Crisis (English Edition)
- 作者:Diamond, Jared
- 発売日: 2019/05/07
- メディア: Kindle版
『銃・鉄・病原菌』のジャレド・ダイアモンドの新作。大変革が起こったときに人間はどう対応していったかという話。
表紙はなんと浮世絵で、黒船に密航してアメリカに渡ろうとした吉田松陰。本書中にも江戸時代末期から明治時代の日本の話が入っています。
実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~
- 作者:吉井 健文
- 発売日: 2019/06/26
- メディア: 単行本(ソフトカバー)
最近プロダクションのコードはレビューがほとんどで、自分で書かせてもらえるのが業務改善系が多い。その手のツールのカスタムプログラミング言語がJavaScriptなので、いい加減にTypeScriptちゃんと学ぼうと思って購入。
tsconfig.json
ほとんどよく読まないで使っていたことがよくわかりました。
分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
- 作者:Brendan Burns
- 発売日: 2019/04/20
- メディア: 単行本(ソフトカバー)
優先度が下がったので先月と同じく積読中。
読み終わった
- 作者:本郷 恵子
- 発売日: 2019/05/15
- メディア: 新書
Think clearly 最新の学術研究から導いた、よりよい人生を送るための思考法
- 作者:ロルフ・ドベリ
- 発売日: 2019/04/01
- メディア: ペーパーバック
- 作者:橋爪 大三郎
- 発売日: 2016/07/14
- メディア: 新書
日本SF精神史----幕末・明治から戦後まで (河出ブックス)
- 作者:長山 靖生
- 発売日: 2009/12/11
- メディア: 単行本(ソフトカバー)
- 作者:正康, 保阪
- 発売日: 2019/06/20
- メディア: 新書
- 作者:ブライアン クリスチャン,トム グリフィス
- 発売日: 2017/10/19
- メディア: 単行本(ソフトカバー)
- 作者:クリスチャン・マスビアウ
- 発売日: 2018/11/14
- メディア: 単行本
- 作者:能條 純一
- 発売日: 2019/06/28
- メディア: コミック
買い物
先月買ったサンダルがよかったものの、雨の日に使えないので靴も買いました。
土踏まずの部分にもフィットするように靴底が隆起していて足の裏がいい感じ。
ブログ
Release Notes 除き書いていません。
仕事
- 運用のスクレイピングシステムをサーバレスシステムに移行して今の所エラーなく動いてる
- GCPのプロフェッショナル資格の Cloud Developer の勉強
- 新人研修を終えて配属される19年新卒向けの研修資料作成
この期間の振り返り
Keep
- Google Cloud Platform の勉強 (Cloud Developer 向けと既存環境の)
- 7月に新人研修向けのタスクが増えるので、それに備える
Problem
- 時期の問題があるとはいえ業務上で技術新トピックにあまり触れられていない
- ストレスのせいもあってやや過食気味
Try
- 特になし
Google Data Portal (旧Data Studio) で Community Connector を作成してデータを直接取得する - 事前知識編
はじめに
GoogleのダッシュボードプロダクトにGoogle Data Portal (旧Data Studio)があります。
会社でG Suite使っているため
- 権限設定
- 広くてもG Suiteの同一組織配下。まとめて設定したいなら組織やプロジェクトの単位でGroupを払い出す
- 簡易バッチ
- Google Apps Scriptが使える
- 社内データ利用
というお手軽さがあり
- Google Apps Script の時間トリガーで以下を処理
- データの収集
- データの加工・整形
- Spreadsheetへの出力
- Google Data Portal の取得〜可視化〜配信
といったパイプラインで処理していました。
ここで一考の余地があるのが「1. Google Apps Script の時間トリガーで以下を処理」の箇所。「2. Google Data Portal の取得〜可視化〜配信」の取得部分(上記の例だとSpreadsheetに接続・取得している)で対応できないか、という要望に応えるのが Community Connector
の機能になります。一旦Community Connector を作成すると「2. Google Data Portal の取得〜可視化〜配信」の側だけで設定が完了するので
- 「1. Google Apps Script の時間トリガーで以下を処理」が不要になるため、より簡易に利用できる
- 認証情報や取得設定などを Community Connector 側で設定できるため、管理がData Portalで完結する
といったメリットがあります。
Community Connector について
Community Connector は Apps Script で指定のインターフェースの関数とマニュフェストを記載することで実装できます。
- 指定インターフェース
getConfig()
: ユーザに入力してもらうコネクタの設定のUIと変数へのマッピングを定義。例) 認証情報などgetSchema()
: 取得データの Data Portal 上でのスキーマを定義。 例) 1カラム目は「ID」という名称のディメンションで文字列型getData()
: データの取得と、Data Portal 定義のデータのオブジェクト形式に設定getAuthType()
: 認証の種類をセット。現段階(2019/06)でサポートされているのは「認証なし」「OAuth 2.0」「APIキー」「ID/Password」「ID/Token」- 詳細はコネクタ作成リファレンスを参照
- マニュフェストファイル
- 次のフィールドが必須
name
,company
,companyUrl
,logoUrl
,addonUrl
,supportUrl
,description
- 詳細はマニュフェストリファレンスを参照
- 次のフィールドが必須
といったところで、各インターフェースの引数や戻り値のオブジェクトはリファレンスの記載を元に作成していきます。
今後、実際に Community Connector を作ってみての感想や気づきを複数回に分けて書いていこうと思います。
次回は指定インターフェースの実装について。
デプロイは Apps Script のマニュフェストを使ったデプロイになります。次々回くらいに書ければと思います。
公開範囲は個人利用からCommunity Connectorのポータルへ公開して一般に使ってもらうまで選べます。パートナーやオープンソース開発のConnectorは高度なコネクタ検索に一覧があります。今回はG Suite組織内での利用を想定しているので、公開に関しては触れません。
最後に開発にあたっての共有、デバッグ、エラー認証他の話で、次々々回くらいに書ければなと思います。
余談
ダッシュボード系のツールではデータを取得する機能を Connector と呼び、類似カテゴリのDOMOでも利用者がJavascriptでConnectorを作成する機能があります。
作成と確認のUIやロギング・エラーはDOMOの方が分かりやすいと思いますが、ドキュメントやサンプルのAPIや設定項目の網羅性はData Portalでしょうか。
Connector自身の機能は性質が異なるので比較するのはアンフェアですが、あえて比較書いておきます。
- Data Portal
- 言語はApps Script (built-inや実行時間などもこれに依存)
- 拡張のDataStudioオブジェクトは設定作成部分のサポート。加工処理は自前、認証はライブラリ読み込んで利用
- DOMO
- 言語はJavascript
- 拡張は作成設定部分以外にも取得したレコードのよくやりたい加工処理や認証処理サポートがある