Redash에서 다른 데이터 소스의 데이터를 Join하기 & 조금 Tips
4772 단어 Salesforce포레. 작은 mredash
개요
Redash에서 다른 데이터 소스의 데이터를 Join하여 표시하는 방법을 설명하고 싶습니다.
결론부터 말하면 (2017.6.11 시점) 다른 데이터 소스를 Join하는 기능은 아직 공식 릴리스되지 않았다 (릴리스 연기?)
따라서 이 기능을 구현하려면 파이썬에서 자체적으로 병합해야 합니다. 자력으로 하지 않으면 안된다고 들으면 동기가 없어진다고 생각합니다만, 반대로 말하면 Redash가 대응하고 있지 않는 것도 Python으로 좋아하게 만들 수 있는 것이라도 이것도 할 수 버립니다! 구현 방법도 간단하기 때문에 노력합시다!
또, Redash에서는 Salesforce의 데이터 소스에 대응하고 있습니다만, 완성도가 이마이치인 것(복수 계층의 릴레이션을 참조할 수 없다)도 있어, 이 방법으로 대응할 수 있을까 생각합니다
준비
파이썬 스크립트 사용
환경 변수 REDASH_ADDITIONAL_QUERY_RUNNERS = "redash.query_runner.python"
추가
참고 : Re:dash의 Python 데이터 소스에서 여러 쿼리의 결과 결합
데이터 소스에 파이썬 추가
※Python 코드로 import하는 라이브러리는 미리 「Modules to import prior to running the script」에 추가할 필요가 있다
구현
구현은 매우 간단합니다.
루프로 찢어지는 것뿐입니다 w
예) 사용자 ID와 일치하는 사용자 이름을 사용자 정보 데이터 소스로부터 얻는다.
파이썬 초보자이므로 양해 바랍니다. . .
# 日付=>文字列変換用
from datetime import datetime
# クエリの実行
# get_query_result(クエリ番号)またはexecute_query('データソース名', sql文)でデータを取得
users = get_query_result(1) # user id datasource
userinfo = get_query_result(2) # user info datasource
result = {} # データ表示用のオブジェクト
# user id: user nameのマップを作成
mapUserName = {}
for row in userinfo['rows']:
# id = user id
# name = user name
mapUserName[row['id']] = row['name']
# mapUserNameに一致するuser nameを取得
for row in users['rows']:
row['username'] = mapUserName[row['userid']]
row['date'] = row['date'].strftime("%Y-%m-%d %H:%M") # 日付型を文字列に変換
# 結果表示用に行データをセット(1行ずつ)
add_result_row(result, {'userid': row['userid'],
'username::filter': row['username'], # 絞り込み用フィルタ項目
'date': row['date']})
# 結果表示用の列定義
add_result_column(result, 'userid', '', 'string')
add_result_column(result, 'username::filter', '', 'string') # 絞り込み用フィルタ項目
add_result_column(result, 'date', '', 'string')
해설
쿼리 실행
미리 정의 된 쿼리를 사용하려면 get_query_result(クエリ番号)
개별 (동적 SQL)로 구현하는 경우 execute_query('データソース名', sql文)
쿼리 번호는 'queries' url에서 가져옵니다.
"http://localhost/queries/18"이라면 "18"
데이터 획득
쿼리에서 얻은 데이터는 행 속성 아래에 저장됩니다.
날짜 형식
redash는 다음 설정을 추가하여 날짜를 포맷합니다.
환경 변수에 REDASH_DATE_FORMAT: "YYYY/MM/DD"
추가
하지만 날짜 데이터는 표시 결과 테이블에서 정형되지만 'Pivot Table'에서는 정형되지 않습니다.
그래서 문자열로 변환하고 나서 출력하도록합니다.
필터 표시
결과 표시 테이블에 데이터를 필터링하기 위한 필터링 항목을 추가할 수 있습니다.
항목 이름에 ::filter
또는 ::multi-filter
추가
세부 사항 Re:dash의 다양한 기술
Salesforce에서는 Select 절에 AS 별칭을 부여할 수 없으므로 이 방법을 사용하여 필터링 항목으로 설정할 수 있습니다.
행 데이터 정의
add_result_row(result, {'カラム名1': '値', 'カラム名2': '値'})
열 정의
add_result_column(result, 'カラム名1', '', 'string')
add_result_column(result, 'カラム名2', '', 'integer')
Tips
CLI로 사용자 추가
> ./manage.py users create {user name} {user's email}
CLI에서 사용자 PW 변경
> ./manage.py users password {user's email} {new password}
참조
파이썬 스크립트 사용
환경 변수
REDASH_ADDITIONAL_QUERY_RUNNERS = "redash.query_runner.python"
추가참고 : Re:dash의 Python 데이터 소스에서 여러 쿼리의 결과 결합
데이터 소스에 파이썬 추가
※Python 코드로 import하는 라이브러리는 미리 「Modules to import prior to running the script」에 추가할 필요가 있다
구현
구현은 매우 간단합니다.
루프로 찢어지는 것뿐입니다 w
예) 사용자 ID와 일치하는 사용자 이름을 사용자 정보 데이터 소스로부터 얻는다.
파이썬 초보자이므로 양해 바랍니다. . .
# 日付=>文字列変換用
from datetime import datetime
# クエリの実行
# get_query_result(クエリ番号)またはexecute_query('データソース名', sql文)でデータを取得
users = get_query_result(1) # user id datasource
userinfo = get_query_result(2) # user info datasource
result = {} # データ表示用のオブジェクト
# user id: user nameのマップを作成
mapUserName = {}
for row in userinfo['rows']:
# id = user id
# name = user name
mapUserName[row['id']] = row['name']
# mapUserNameに一致するuser nameを取得
for row in users['rows']:
row['username'] = mapUserName[row['userid']]
row['date'] = row['date'].strftime("%Y-%m-%d %H:%M") # 日付型を文字列に変換
# 結果表示用に行データをセット(1行ずつ)
add_result_row(result, {'userid': row['userid'],
'username::filter': row['username'], # 絞り込み用フィルタ項目
'date': row['date']})
# 結果表示用の列定義
add_result_column(result, 'userid', '', 'string')
add_result_column(result, 'username::filter', '', 'string') # 絞り込み用フィルタ項目
add_result_column(result, 'date', '', 'string')
해설
쿼리 실행
미리 정의 된 쿼리를 사용하려면 get_query_result(クエリ番号)
개별 (동적 SQL)로 구현하는 경우 execute_query('データソース名', sql文)
쿼리 번호는 'queries' url에서 가져옵니다.
"http://localhost/queries/18"이라면 "18"
데이터 획득
쿼리에서 얻은 데이터는 행 속성 아래에 저장됩니다.
날짜 형식
redash는 다음 설정을 추가하여 날짜를 포맷합니다.
환경 변수에 REDASH_DATE_FORMAT: "YYYY/MM/DD"
추가
하지만 날짜 데이터는 표시 결과 테이블에서 정형되지만 'Pivot Table'에서는 정형되지 않습니다.
그래서 문자열로 변환하고 나서 출력하도록합니다.
필터 표시
결과 표시 테이블에 데이터를 필터링하기 위한 필터링 항목을 추가할 수 있습니다.
항목 이름에 ::filter
또는 ::multi-filter
추가
세부 사항 Re:dash의 다양한 기술
Salesforce에서는 Select 절에 AS 별칭을 부여할 수 없으므로 이 방법을 사용하여 필터링 항목으로 설정할 수 있습니다.
행 데이터 정의
add_result_row(result, {'カラム名1': '値', 'カラム名2': '値'})
열 정의
add_result_column(result, 'カラム名1', '', 'string')
add_result_column(result, 'カラム名2', '', 'integer')
Tips
CLI로 사용자 추가
> ./manage.py users create {user name} {user's email}
CLI에서 사용자 PW 변경
> ./manage.py users password {user's email} {new password}
참조
# 日付=>文字列変換用
from datetime import datetime
# クエリの実行
# get_query_result(クエリ番号)またはexecute_query('データソース名', sql文)でデータを取得
users = get_query_result(1) # user id datasource
userinfo = get_query_result(2) # user info datasource
result = {} # データ表示用のオブジェクト
# user id: user nameのマップを作成
mapUserName = {}
for row in userinfo['rows']:
# id = user id
# name = user name
mapUserName[row['id']] = row['name']
# mapUserNameに一致するuser nameを取得
for row in users['rows']:
row['username'] = mapUserName[row['userid']]
row['date'] = row['date'].strftime("%Y-%m-%d %H:%M") # 日付型を文字列に変換
# 結果表示用に行データをセット(1行ずつ)
add_result_row(result, {'userid': row['userid'],
'username::filter': row['username'], # 絞り込み用フィルタ項目
'date': row['date']})
# 結果表示用の列定義
add_result_column(result, 'userid', '', 'string')
add_result_column(result, 'username::filter', '', 'string') # 絞り込み用フィルタ項目
add_result_column(result, 'date', '', 'string')
add_result_row(result, {'カラム名1': '値', 'カラム名2': '値'})
add_result_column(result, 'カラム名1', '', 'string')
add_result_column(result, 'カラム名2', '', 'integer')
CLI로 사용자 추가
> ./manage.py users create {user name} {user's email}
CLI에서 사용자 PW 변경
> ./manage.py users password {user's email} {new password}
참조
Reference
이 문제에 관하여(Redash에서 다른 데이터 소스의 데이터를 Join하기 & 조금 Tips), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/comefigo/items/f4f0023dc960767ccc84텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)