ChangeLog - noissefnoc

日々のChangeLog。趣味のコードとかの話

macOS (10.15) に presto (0.227) をインストールした

諸事情で presto

prestodb.github.io

の関数の挙動を調べたいと思ったので、ローカルに環境構築しました。

図示すると下図

f:id:noissefnoc:20191110180054p:plain
今回やりたいこと

で、やりたいことの割に色々やることと、引っかかる箇所が多かったので記録を残しておきます。

環境は

  • macOS (10.15)
  • AdoptOpenJDK (1.8.0_u232)
  • presto (0.227)
  • mysql (8.0.16)

です。

presto のバックエンドに利用するデータベースのインストール

presto 単体だと presto サーバの JMX しか接続先がないので、先にバックエンドになるデータベースのインストール。

今回は MySQL を homebrew でインストール。

$ brew install mysql

また、このままだとデータがない状態なので、外部からCSVをロードします。

LOAD DATA LOCAL 構文で一括インストールしようとしたのですが、MySQL 8 から Server-Client 共にオプションを付与しないと利用できないようになっていました。

dev.mysql.com

ということで、サーバ、クライアント共に対応をします。

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を使ったクライアントソフトを使っているので公式の

dev.mysql.com

を参照して

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 を確認すると

prestodb.io

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 の情報がないので公式ドキュメント

prestodb.github.io

にしたがって、設定ファイルを作成します。今回 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の苦手を克服する本 データの操作がイメージできれば誰でもできる

新人に教える用に

日英インテリジェンス戦史

コンピュータサイエンス、実質、第二次世界大戦の軍事・諜報を端に発しているので

教養としての「世界史」の読み方

教養としての「世界史」の読み方

教養としての「世界史」の読み方

  • 作者:本村 凌二
  • 発売日: 2016/12/17
  • メディア: 単行本(ソフトカバー)

教養をつけたいので

PLAY WORK プレイ・ワーク 仕事の生産性がグングン高まる「遊びながら働く」方法

やりたい事を仕事にできればいいよねという話

読み終わった

応天の門 11 (BUNCH COMICS)

応天の門 11 (BUNCH COMICS)

  • 作者:灰原 薬
  • 発売日: 2019/07/09
  • メディア: コミック
ヒストリエ(11) (アフタヌーンKC)

ヒストリエ(11) (アフタヌーンKC)

  • 作者:岩明 均
  • 発売日: 2019/07/23
  • メディア: コミック
教養としての「ローマ史」の読み方

教養としての「ローマ史」の読み方

改訂2版 みんなのGo言語

改訂2版 みんなのGo言語

買い物

  • 夏の暑さで週2で洗濯しても(毎日洗濯してないのが一人暮らしの無精)寝具カバーが厳しい状態になったので買い換えた
  • 快適さにはもう少し投資額を高めるべきかも

ブログ

改訂2版『みんなのGo言語』を読みました。主な内容はレポジトリ側に書いてるので、あまりエントリ自体がしっかりしていないのが悩みどころ

noissefnoc.hateblo.jp

仕事

  • ほとんどトラブル対応に追われていました (ただ、今月で完了予定)
  • 19年新卒向けの研修を2回しました (完了)
  • 調整事を本職にルーティングしたい

この期間の振り返り

Keep

  • 過食を抑えてカロリー制限
    • 平日朝昼はキープできていたが、夜が遅くなるとほとんど食べない/遅くに食べるとコンビニ食 or ラーメンでダメ
    • 残念ながら毎日仕事で遅くなって平日我慢した分、毎週末飲みに行っていた
  • 毎日運動と筋トレ
    • 運動の方が毎日遅く帰ることになったことに伴ってできず
    • 筋トレはプランクなど、腹筋中心で
  • 9月で年始からの仕事が一つ終わるので締めにかかりたい

Problem

  • 業務上で技術新トピックにあまり触れられていない
  • 平日の帰りが慢性的に遅いと諸々スケジュールが狂うので困っている

Try

  • 特になし (一旦忙しいのを落ち着くまで頑張りたい)

改訂2版 『みんなのGo言語』を読んだ

改訂2版 みんなのGo言語

改訂2版 みんなのGo言語

『改訂2版 みんなのGo言語』を7/25の某書店の先行発売で買って今日読み終わりました。盆休み他なく、カレンダー通りに働いていて1ヶ月程度かかりました。読書メモとコードスニペットは以下のレポジトリにコミットしてあります。

github.com

仕事であまりGo言語を使う機会がなく、だいぶ忘れがちになっていたのですが、よい復習の機会になりました。

読み返していて思ったのですが、Go言語の特性であるgorutineを使ったコードをいまだにほとんど書いたことがないなと。CLIくらいしか書いておらず、もう少し幅があるようにしたいなとは思いました。

また、 go module への対応など、比較的最近のトピックも把握できてよかったです。

内容によっては書かれてから時間が置かれたものや、コードスニペットにしたさいに簡略化した関係でうまく動かなくなっているものもあっていくつか公式のお問い合わせからフィードバックしてみました。

gihyo.jp

現状盆休みも重なって更新止まっているようですが、気が付いたところはフィードバック出していこうと思います。

じぶん Release Notes (ver 2019.07)

技術・開発関連

ver 2019.06 〜 ver 2019.07 でできた技術的取り組みは特にない気がします。よくない。

イベント

多忙で休日も出かけてません。

読んでいる

改訂2版 みんなのGo言語

改訂2版 みんなのGo言語

早売りで購入して読んでいるところ。順当にアップデートされていてためになる。業務ではGo言語使わなくなってしまったので半ば趣味。

去年英語版で読んだけれど、日本語だとまた細かいところの理解度が変わって理解度が上がっている気がする。

読み終わった

実践TypeScript ~	BFFとNext.js&Nuxt.jsの型定義~

実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~

  • 作者:吉井 健文
  • 発売日: 2019/06/26
  • メディア: 単行本(ソフトカバー)

買い物

特になし。そろそろバックパックの背当て部分のすり減りが気になってきたので、同じモデルで買い換えようか検討中。

ブログ

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 をいくつか作った

イベント

梅雨になって雨がちで外出あまりできず。

  • 映画館
    • 『ガールズ&パンツァー最終章 第2章』
    • X-MEN: ダーク・フェニックス』
    • スパイダーマン:ファー・フロム・ホーム』

読んでいる

『銃・鉄・病原菌』のジャレド・ダイアモンドの新作。大変革が起こったときに人間はどう対応していったかという話。

表紙はなんと浮世絵で、黒船に密航してアメリカに渡ろうとした吉田松陰。本書中にも江戸時代末期から明治時代の日本の話が入っています。

実践TypeScript ~	BFFとNext.js&Nuxt.jsの型定義~

実践TypeScript ~ BFFとNext.js&Nuxt.jsの型定義~

  • 作者:吉井 健文
  • 発売日: 2019/06/26
  • メディア: 単行本(ソフトカバー)

最近プロダクションのコードはレビューがほとんどで、自分で書かせてもらえるのが業務改善系が多い。その手のツールのカスタムプログラミング言語JavaScriptなので、いい加減にTypeScriptちゃんと学ぼうと思って購入。

tsconfig.json ほとんどよく読まないで使っていたことがよくわかりました。

優先度が下がったので先月と同じく積読中。

読み終わった

院政 天皇と上皇の日本史 (講談社現代新書)

院政 天皇と上皇の日本史 (講談社現代新書)

日本SF精神史----幕末・明治から戦後まで (河出ブックス)

日本SF精神史----幕末・明治から戦後まで (河出ブックス)

  • 作者:長山 靖生
  • 発売日: 2009/12/11
  • メディア: 単行本(ソフトカバー)
世界史の新常識 (文春新書)

世界史の新常識 (文春新書)

  • 発売日: 2019/03/20
  • メディア: 新書
令和を生きるための昭和史入門 (文春新書)

令和を生きるための昭和史入門 (文春新書)

アルゴリズム思考術:問題解決の最強ツール

アルゴリズム思考術:問題解決の最強ツール

センスメイキング

センスメイキング

昭和天皇物語 (4) (ビッグコミックス)

昭和天皇物語 (4) (ビッグコミックス)

  • 作者:能條 純一
  • 発売日: 2019/06/28
  • メディア: コミック
風都探偵 (6) (ビッグコミックス)

風都探偵 (6) (ビッグコミックス)

  • 発売日: 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を払い出す
  • 簡易バッチ
  • 社内データ利用
    • 人が作るデータなら相当の経年を経ない限りはSpreadsheetで収まるので、Spreadsheetで
    • (適切な用途ではないものの)無償である程度のレコードを扱いたければFusion Tablesがあったが今年末でディスコン
    • (それ以上でGCPになるとIAMの権限管理が入るし、予算の話も出るし、セキュリティの話もあってちょっとハードル上がる)

というお手軽さがあり

  1. Google Apps Script の時間トリガーで以下を処理
    • データの収集
    • データの加工・整形
    • Spreadsheetへの出力
  2. Google Data Portal の取得〜可視化〜配信
    • Spreadsheetをデータソースにして適当な間隔でデータを更新するように設定
    • ダッシュボードごとの権限設定
    • ダッシュボードに表示する図表を作成
    • (必要に応じて) 定期的にメールによるダッシュボード配信

といったパイプラインで処理していました。

ここで一考の余地があるのが「1. Google Apps Script の時間トリガーで以下を処理」の箇所。「2. Google Data Portal の取得〜可視化〜配信」の取得部分(上記の例だとSpreadsheetに接続・取得している)で対応できないか、という要望に応えるのが Community Connector

developers.google.com

の機能になります。一旦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」
    • 詳細はコネクタ作成リファレンスを参照
  • マニュフェストファイル

といったところで、各インターフェースの引数や戻り値のオブジェクトはリファレンスの記載を元に作成していきます。

今後、実際に Community Connector を作ってみての感想や気づきを複数回に分けて書いていこうと思います。

次回は指定インターフェースの実装について。

デプロイは Apps Script のマニュフェストを使ったデプロイになります。次々回くらいに書ければと思います。

公開範囲は個人利用からCommunity Connectorのポータルへ公開して一般に使ってもらうまで選べます。パートナーやオープンソース開発のConnectorは高度なコネクタ検索に一覧があります。今回はG Suite組織内での利用を想定しているので、公開に関しては触れません。

最後に開発にあたっての共有、デバッグ、エラー認証他の話で、次々々回くらいに書ければなと思います。

余談

ダッシュボード系のツールではデータを取得する機能を Connector と呼び、類似カテゴリのDOMOでも利用者がJavascriptでConnectorを作成する機能があります。

developer.domo.com

作成と確認のUIやロギング・エラーはDOMOの方が分かりやすいと思いますが、ドキュメントやサンプルのAPIや設定項目の網羅性はData Portalでしょうか。

Connector自身の機能は性質が異なるので比較するのはアンフェアですが、あえて比較書いておきます。

  • Data Portal
    • 言語はApps Script (built-inや実行時間などもこれに依存)
    • 拡張のDataStudioオブジェクトは設定作成部分のサポート。加工処理は自前、認証はライブラリ読み込んで利用
  • DOMO
    • 言語はJavascript
    • 拡張は作成設定部分以外にも取得したレコードのよくやりたい加工処理や認証処理サポートがある

という感じで、あくまで私見ですが、汎用性と既存資産のData Portalと目的特化のDOMOという感じです。