カテゴリー: redash

  • Error running query: No index found for query. Please use a SCAN query, or set allow_select_scan=True opt allow_select_scan true

    Error running query: No index found for query. Please use a SCAN query, or set allow_select_scan=True opt allow_select_scan true

    はじめに

    DynamoDBは言わずと知れたKVSだが、それを忘れてredashで実行しようとすると、当然ながらエラーになる。

    redashでDynamoDBのデータを見ようとした際、以下のようなエラーが出た

     
     

    原因

    RDSのように普通のSQLで書いていた。
    たとえば上のように
     
    “` select * from xxxx “`
    と書いていたのが原因
     

    対応

     
    “` scan * from xxxx “`
    という書き方に修正し再度実行
     
    無事データを取得できた
     
  • mysqlのデータをembulkでBigQueryへ入れredashで確認する

    mysqlのデータをembulkでBigQueryへ入れredashで確認する

    はじめに

    データ解析するにあたり、BigQueryを使いたい事がある。mysqlからデータを取得するところをembulkを使う。embulkのインストール方法から簡単な使い方までまとめた。

    embulkのインストール

    embulkはJavaで作られており、一からinstallしようとすると、割と面倒。今回はDockerを使うこととする。

    BigQueryの設定

    APIs & Servicesでcredentialを作成する。

    jsonファイルダウンロードできるので、適宜保存する。

    Dockerfileを作成

    GCPにプロジェクトを作り、bigqueryに権限を付与。APIで操作できるようjsonファイルを取得する。

    FROM java:7
    MAINTAINER sumito.tsukada "tsukada@sumito.jp"
    
    ENV EMBULK_VERSION 0.8.39
    
    RUN curl -L https://bintray.com/artifact/download/embulk/maven/embulk-${EMBULK_VERSION}.jar -o /opt/embulk.jar
    RUN java -jar /opt/embulk.jar gem install embulk-input-mysql
    RUN java -jar /opt/embulk.jar gem install embulk-output-bigquery
    
    WORKDIR /work
    ENTRYPOINT ["java", "-jar", "/opt/embulk.jar"]
    CMD ["--help"]

    build

    # docker build -t tsukada/embulk .
    Sending build context to Docker daemon  2.048kB
    Step 1/9 : FROM java:7
     ---> 5dc48a6b75af
    Step 2/9 : MAINTAINER sumito.tsukada "tsukada@sumito.jp"
     ---> Using cache
     ---> bc78ed50d614
    Step 3/9 : ENV EMBULK_VERSION 0.8.39
     ---> Using cache
     ---> 266476a95a55
    Step 4/9 : RUN curl -L https://bintray.com/artifact/download/embulk/maven/embulk-${EMBULK_VERSION}.jar -o /opt/embulk.jar
     ---> Using cache
     ---> b21e71d6ce44
    Step 5/9 : RUN java -jar /opt/embulk.jar gem install embulk-input-mysql
     ---> Using cache
     ---> 2fb224b24c49
    Step 6/9 : RUN java -jar /opt/embulk.jar gem install embulk-output-bigquery
     ---> Running in b27f12583137
    2018-09-18 02:50:32.526 +0000: Embulk v0.8.39
    
    ********************************** INFORMATION **********************************
      Join us! Embulk-announce mailing list is up for IMPORTANT annoucement such as
        compatibility-breaking changes and key feature updates.
      https://groups.google.com/forum/#!forum/embulk-announce
    *********************************************************************************
    Gem plugin path is: /root/.embulk/jruby/2.3.0
    
    Successfully installed uber-0.1.0
    Successfully installed declarative-0.0.10
    Successfully installed declarative-option-0.1.0
    Successfully installed representable-3.0.4
    Successfully installed retriable-3.1.2
    Successfully installed public_suffix-3.0.3
    Successfully installed addressable-2.5.2
    Successfully installed mime-types-data-3.2018.0812
    Successfully installed mime-types-3.2.2
    Successfully installed multipart-post-2.0.0
    Successfully installed faraday-0.15.2
    Successfully installed multi_json-1.13.1
    Successfully installed jwt-2.1.0
    Successfully installed signet-0.9.2
    Successfully installed memoist-0.16.0
    Successfully installed os-1.0.0
    Successfully installed googleauth-0.6.6
    Successfully installed httpclient-2.8.3
    Successfully installed google-api-client-0.24.0
    Successfully installed thread_safe-0.3.6-java
    Successfully installed tzinfo-1.2.5
    Successfully installed time_with_zone-0.3.1
    Successfully installed embulk-output-bigquery-0.4.9
    23 gems installed
     ---> 74e55d0084d6
    Removing intermediate container b27f12583137
    Step 7/9 : WORKDIR /work
     ---> 19d9c56bf738
    Removing intermediate container c73ef21e7b6c
    Step 8/9 : ENTRYPOINT java -jar /opt/embulk.jar
     ---> Running in 4bca2f2ed68e
     ---> b4458584af6f
    Removing intermediate container 4bca2f2ed68e
    Step 9/9 : CMD --help
     ---> Running in 7fdbd68d5021
     ---> 0bfdab6b8d24
    Removing intermediate container 7fdbd68d5021
    Successfully built 0bfdab6b8d24
    Successfully tagged tsukada/embulk:latest

    embulkの設定

    今回はmysqlからデータを抜き、BigQueryに入れるとする。

    in:
      type: mysql
      user: redash
      password: passwd
      database: sample
      host: 127.0.0.1
      query: "select date, user from sampletable"
    out:
      type: bigquery
      auth_method: json_key
      json_keyfile: tsukada-bigquery.json
      path_prefix: /tmp/
      file_ext: .csv.gz
      source_format: CSV
      project: 12345679
      dataset: table123
      auto_create_table: true
      table: user_data
      formatter: {type: csv, charset: UTF-8, delimiter: ',', header_line: false}
      encoders:
      - {type: gzip}

    実行

    docker run -t -v ${PWD}:/work tsukada/embulk run sample.yml

    以下のようい表示されればOK

    [INFO] (main): Committed.

    BigQueryで確認

    データが入ったという事がわかった。
    また、

    #standardSQL

    と書いてあるが、これはコメントではなく、BigQueryが判断する重要な宣言になるので削除するとうまく動かないので注意。

     

    redashでBigQueryに接続

    先ほど使ったjsonファイルと接続先のプロジェクトIDを入力すると、redashからbigqueryへ接続する事ができる。

     

     

  • docker版redash 運用でよく使うコマンドまとめ

    docker版redash 運用でよく使うコマンドまとめ

    はじめに

    データベースを可視化するのにredashはとても便利。

    しかし、運用を考えるといろいろ考えることがある。
    redashでよく使うオペレーションをまとめた。

    start redash

    cd ~/redash
    docker-compose -f docker-compose.production.yml up -d

    redashのuserを確認

    docker exec -it redash_server_1 ./manage.py users list

    create user

    docker exec -it redash_server_1 ./manage.py users create sumito.tsukada@sumito.jp sumito.tsukada

    change password

    docker exec -it redash_server_1 ./manage.py users password sumito.tsukada@sumito.jp password

    delete redash user

    docker exec -it redash_server_1 ./manage.py users deletesumito.tsukada@sumito.jp

    redash v5以前は、userをdisableする機能がなかったので削除するしかなかったが、一度クエリを作ったり、ダッシュボードを作ると削除できないという問題があった。v5以降は標準でdisableする機能が追加されたので今後使う頻度は減りそう。

    v4以前で上記コマンドでエラーになった場合、redash_postgres_1のレコードを強制的に削除することによって削除が可能になる(ことがある)

    docker ps
    (login to postgress)
    docker exec -it redash_postgres_1 /bin/bash
    psql -U postgres postgres
    SELECT * FROM events WHERE user_id = 6;
    DELETE FROM events WHERE user_id = 6;

    redashデータのexport

    docker ps
    docker exec -it redash_postgres_1 /bin/bash
    pg_dump -U postgres postgres | gzip > /tmp/redash_backup.gz
    exit
    docker cp redash_postgres_1:/tmp/redash_backup.gz .
    

    redashデータのimport

    本作業を行う前に、postgres以外のdockerコンテナを停止する

    docker cp /tmp/redash_backup.gz redash_postgres_1:/tmp/redash_backup.gz
    docker exec -it redash_postgres_1 /bin/bash
    
    psql -U postgres template1
    DROP DATABASE IF EXISTS postgres;
    CREATE DATABASE postgres;
    \q
    zcat /tmp/redash_backup.gz | psql -U postgres -d postgres
    

    Dockerのpostgresのデータをバックアップ

    cronなのに仕込み、定期的に取得する

    /bin/docker exec redash_postgres_1 pg_dump -U postgres postgres | /bin/gzip > /tmp/redash_backup.gz

    参考情報

    オライリー本より読みやすく、Dockerについて体系的に学ぶことができるのでおすすめ。

  • redash v5 (5.0) でIn Progress状態のゾンビプロセスをkillする

    redash v5 (5.0) でIn Progress状態のゾンビプロセスをkillする

    はじめに

    重いクエリを投げるとredashが固まってしまい、他のプロセスが起動できなくなることがある。キューを削除する方法を紹介

    前提

    Docker版redash v5 (5.0)

    手順

    dockerにログイン

    docker exec -it redash_redis_1 /bin/sh  

    redisを操作する

    /data # redis-cli 
    127.0.0.1:6379> type query_task_trackers:in_progress
    zset
    127.0.0.1:6379> zrange query_task_trackers:in_progress 0 -1
    1) "query_task_tracker:8b39ba38-7ce9-49f1-8c57-2633ac4bc05b"
    127.0.0.1:6379> zrem query_task_trackers:in_progress query_task_tracker:8b39ba38-7ce9-49f1-8c57-2633ac4bc05b
    (integer) 1
    127.0.0.1:6379> zrange query_task_trackers:in_progress 0 -1
    (empty list or set)
    127.0.0.1:6379> 

    結果

    無事キューが削除された

    最後に

    おそらくversion 5以前でも同様の手順で削除可能

  • JavaScriptの制御をGoogle Chrome側で変更する

    JavaScriptの制御をGoogle Chrome側で変更する

    はじめに

    redash v5のベータ版がお披露目された。注目の機能の一つ、AleartがChatWorkにも飛ばせるようになった。

    しかし

    バグなのだろうか、登録しようとしても有効化しようとしてもSaveが押せない。JavaScript側で制御していて、その制御がおかしいようだ。ベータ版なのでこのような問題もあるのだろう

    対処

    pull requestを投げて解決した。

    と言えればかっこいいが、今回はクライアント(私のブラウザ)のJavaScriptをいじり、無理やり制御を解除した

    JavaScriptの制御をユーザー側で変更する

    Chromeのdeveloper modeを使う

    Macであれば[ Option + command + i ]

    手順は以下の通り

    その後、Saveボタンは無事押すことができるようになり、保存も成功した

    設定したアラートも文字登録された。

     

  • Docker版 redashをv5 (5.0) へupdate!

    Docker版 redashをv5 (5.0) へupdate!

    はじめに

    redash v5 (5.0)がリリースされた。

    https://discuss.redash.io/t/v5-beta-is-now-ready/2240

    今までは4.0.0-rc.1(ほぼlatest)を使っていたが、v5へupdateしたときの手順を記す。

    手順

    PostgreSQLのバックアップを取得

    docker ps
    docker exec -it redash_postgres_1 /bin/bash
    pg_dump -U postgres postgres | gzip > /tmp/redash_backup.gz
    exit
    docker cp redash_postgres_1:/tmp/redash_backup.gz .

    redashの停止

    # docker-compose -f docker-compose.production.yml down
    Stopping redash_nginx_1    ... 
    Stopping redash_server_1   ... 
    Stopping redash_postgres_1 ... 
    Stopping redash_worker_1   ... 
    Stopping redash_nginx_1    ... done
    Stopping redash_server_1   ... done
    Stopping redash_postgres_1 ... done
    Stopping redash_worker_1   ... done
    Stopping redash_redis_1    ... done
    Removing redash_nginx_1    ... done
    Removing redash_server_1   ... done
    Removing redash_postgres_1 ... done
    Removing redash_worker_1   ... done
    Removing redash_redis_1    ... done
    Removing network redash_default

    docker-composeファイルを修正

    # diff docker-compose.production.yml docker-compose.production.yml.20180808
    10c10
    <     image: redash/redash:5.0.0-beta.b4476
    ---
    >     image: redash/redash:4.0.0-rc.1
    26c26
    <     image: redash/redash:5.0.0-beta.b4476
    ---
    >     image: redash/redash:4.0.0-rc.1
    # 
    

    今までは4.0.0rc.1を使っていたが、そこを

    https://hub.docker.com/r/redash/redash/tags/

    の最新tagに変更した

    PostgreSQLをv5用にconvert

    # docker-compose -f docker-compose.production.yml run --rm server manage db upgrade
    Starting redash_redis_1 ... done
    Starting redash_postgres_1 ... done
    [2018-08-08 01:48:59,768][PID:1][INFO][root] Generating grammar tables from /usr/lib/python2.7/lib2to3/Grammar.txt
    [2018-08-08 01:48:59,850][PID:1][INFO][root] Generating grammar tables from /usr/lib/python2.7/lib2to3/PatternGrammar.txt
    [2018-08-08 01:49:03,702][PID:1][INFO][alembic.runtime.migration] Context impl PostgresqlImpl.
    [2018-08-08 01:49:03,703][PID:1][INFO][alembic.runtime.migration] Will assume transactional DDL.
    [2018-08-08 01:49:03,736][PID:1][INFO][alembic.runtime.migration] Running upgrade 969126bd800f -> 1daa601d3ae5, add columns for disabled users
    [2018-08-08 01:49:03,745][PID:1][INFO][alembic.runtime.migration] Running upgrade 1daa601d3ae5 -> d4c798575877, empty message
    [2018-08-08 01:49:03,761][PID:1][INFO][alembic.runtime.migration] Running upgrade d4c798575877 -> e7004224f284, add_org_id_to_favorites
    [2018-08-08 01:49:03,770][PID:1][INFO][alembic.runtime.migration] Running upgrade e7004224f284 -> a92d92aa678e, inline_tags
    [2018-08-08 01:49:03,777][PID:1][INFO][alembic.runtime.migration] Running upgrade a92d92aa678e -> 0f740a081d20, inline_tags
    [2018-08-08 01:49:03,782][PID:1][INFO][alembic.runtime.migration] Running upgrade 0f740a081d20 -> 71477dadd6ef, favorites_unique_constraint

     

    docker-composeを起動

    # docker-compose -f docker-compose.production.yml up -d
    redash_postgres_1 is up-to-date
    redash_redis_1 is up-to-date
    Creating redash_worker_1 ... 
    Creating redash_server_1 ... 
    Creating redash_worker_1
    Creating redash_server_1 ... done
    Creating redash_nginx_1 ... 
    Creating redash_nginx_1 ... done
    # 

    update確認

    今まで使っていたURLにアクセスすると、v5になったredashに接続が可能

    v5の感想

    Queriesに”Favorites”機能が追加されたり、パラメータをブラウザ経由で設定できたりと今までより使い勝手が向上。


    APIなどの機能テストをした後、本番もupdateしていきたい

    リストア(おまけ)

    今回は使わなかったけど、万が一databaseがおかしくなった場合、バックアップから復元することになる。その際の手順は以下の通り。一度drop databaseしたあと、バックアップしたデータを流し込む

    docker cp /tmp/redash_backup.gz redash_postgres_1:/tmp/redash_backup.gz
    docker exec -it redash_postgres_1 /bin/bash
    
    psql -U postgres template1
    DROP DATABASE IF EXISTS postgres;
    CREATE DATABASE postgres;
    \q
    zcat /tmp/redash_backup.gz | psql -U postgres -d postgres
    

    5.0.0-beta.b4476 から 現在のlatestへのupdate (2018/10/3 upadte)

    5.0.0.b4754 から 現在のlatestへのupdateは、docker imageを切り替えるだけで大丈夫なようだ。

    以下のように変更し、docker composeを立ち上げるだけでよい。

    <     image: redash/redash:latest
    ---
    >     image: redash/redash:5.0.0-beta.b4476

    5.0.0.b4754 から 現在のlatestへのupdateではDBのスキーマ変更は不要。

     

     

  • Redash Meetup 3.0.0 まとめ

    Redash Meetup 3.0.0 まとめ

    前回redashのMEETUPに参加ならびに登壇させていただき、非常に多くの学びがあった
    第三回の勉強会を開催するという話しを聞き、さっそく参加させてもらった

    前回は勉強会での情報の多さ、濃さを受け、今回はレポートとして残そうと思い、自分の関心のある視点をベースにまとめる事にした

    (さらに…)