by shigemk2

当面は技術的なことしか書かない

memo Redash Query Runner Athena

RedashのPrestoクエリランナーには当然pyathenaを使っているけど、本家のドキュメントがあまり充実していないからなのか、Athenaに対して実行できるクエリを制限する方法がよくわからない

redash/athena.py at 53abc1678045c89fe619cb1581e52321e6abc8df · getredash/redash · GitHub

GitHub - laughingman7743/PyAthena: PyAthena is a Python DB API 2.0 (PEP 249) compliant client for Amazon Athena.

memo Presto LEFT OUTER JOIN

LEFT OUTER JOINのON条件で複数マッチしたときは、掛け算になる。下のようなクエリがあったとして、idで外部結合しようとしているけど、idがそれぞれ2つあるので、id=1については 2 * 2 で4つの組み合わせができる。

SELECT *
FROM (
SELECT id,
       name,
       age
FROM (
      VALUES (1, 'alpha', 10),
             (1, 'alpha', 10),
             (2, 'beta', 20)) AS t (id, name, age)) a
LEFT OUTER JOIN (
SELECT DISTINCT id,
       name,
       country
FROM (
      VALUES (1, 'alpha', 'JP'),
             (1, 'alpha', 'JP'),
             (2, 'beta', 'US')) AS t (id, name, country)) b ON a.id = b.id

tesseract

導入はここ(MacとかLinuxの各ディストリとかあらかた書いてる) なお、OS(というかパッケージ管理)によって入れられるtesseractのバージョンは違う

Home · tesseract-ocr/tesseract Wiki · GitHub

日本語のtraineddataはここ traineddataのバージョンに気をつけてダウンロードして、所定の場所に置くこと Ubuntu18.04だと4.0.0-beta.1が入り、/usr/share/tesseract-ocr/4.00/tessdata/ にtraineddataが格納されていた tessdata/jpn.traineddata at master · tesseract-ocr/tessdata · GitHub

実行はこんな感じ。

$ tesseract test.png out -l jpn

Redash access_permissions

access_permissionsのテーブル定義まわりがこのあたりに記載されている。

redash/models.py at b1f5d60460664b4f604f2fa699b0814f8b701416 · getredash/redash · GitHub

widgetsやdashboardsの権限情報をここで保持している。 grantor_idが権限を付与したユーザーIDで、grantee_idが権限を付与されたユーザーID。

dashboardsの権限一覧はこんなクエリで取ることができる。

SELECT dashboards.id,
       dashboards.name,
       access_permissions.grantor_id,
       grantor_users.name AS grantor_name,
       access_permissions.grantee_id,
       grantee_users.name AS grantee_name
FROM access_permissions
INNER JOIN dashboards ON access_permissions.object_id = dashboards.id
INNER JOIN users grantor_users ON access_permissions.grantor_id = grantor_users.id
INNER JOIN users grantee_users ON access_permissions.grantee_id = grantee_users.id
WHERE object_type = 'dashboards'