re : dash에서 파이썬 사용 vol.1

10427 단어 파이썬redash
주식회사 오즈비전@terra_yucco 입니다.
현재 사내의 BI 툴로서 re:dash를 도입하고 있습니다만, 이 아이가 단지 쿼리 쓰는 것 이외에, python도 데이터 소스로서 사용할 수 있는 것 같다.
그래서 C:6년/PHP:3년인 초보자 Pythonista, 사내 의뢰의 대응을 위해 Python의 길에 발을 디디었습니다.

아, 우리의 re:dash는 현재 「2.0.0+b2990」입니다. 흠뻑 낡습니다.

vol.1 첫날 도전



원래 파이썬 문법을 이해하지 못합니다.



구구입니다. 해결.
아니 여러가지 유의가 달라 곤란하고 있습니다만! 어쨌든 루비 같은

파이썬으로 출력 결과를 만들려면 어떻게해야합니까?



사내 샘플을 참고로 우선 더해 보았다



일단 값은 취해졌지만, 왜 이렇게 되어 있는지 모른다.column 를 바꾸면 컬럼명이, value 를 바꾸면 대상값이 변화하는 것을 알았다. 그만큼.
result = {}
add_result_column(result, 'column', '', 'string')
add_result_row(result, {'column' : 'value'})



문서가 있었다.



큰 양도없는 경악의 단순함.
코드가 모든 것을 이야기하고 있다고 생각하지만, 양이 적기 때문에 Appendix를 번역했습니다.
htps : // Reda sh. 이오 / 헤르프 온 p 예보 / 호 w rd를 rks / 돗자 - 그렇게 r 세레 하는 lts - 푸마 t. HTML

문서를 읽은 후에



htps : // 기주 b. 이 m/게 t레다 sh/레다 sh/bぉb/마s테 r/레다 sh/쿠에 ry_루네 r/py 텐. py
이하의 메소드들이 python에서는 헬퍼 메소드로서 사용할 수 있을 것 같습니다만, 문서가 일절 없기 때문에, 구현을 읽지 않으면 안 되는 것 같다.
  • execute_query
  • add_result_column
  • add_result_row

  • execute_query


  • htps : // 기주 b. 이 m/게 t레다 sh/레다 sh/bぉb/v2. py#L156-L177
  • 기능 요약
  • 매우 간단하게 말하면 지정된 데이터 소스에 연결하고 쿼리를 실행하면됩니다.
  • 데이터 소스가 없으면 오류가 발생합니다
  • 데이터 소스는 이름이나 ID로 설정할 수 있습니다

  • def execute_query(data_source_name_or_id, query):
        """Run query from specific data source.
        Parameters:
        :data_source_name_or_id string|integer: Name or ID of the data source
        :query string: Query to run
        """
    

    add_result_column


  • htps : // 기주 b. 이 m/게 t레다 sh/레다 sh/bぉb/v2. py#L121-L140
  • 기능 요약
  • 열 형식 지정이 지원되는지 확인
  • result["columns"][]를 name, friendly_name, column_type으로 설정

  • def add_result_column(result, column_name, friendly_name, column_type):
        """Helper function to add columns inside a Python script running in Redash in an easier way
        Parameters:
        :result dict: The result dict
        :column_name string: Name of the column, which should be consisted of lowercase latin letters or underscore.
        :friendly_name string: Name of the column for display
        :column_type string: Type of the column. Check supported data types for details.
        """
    

    add_result_row


  • htps : // 기주 b. 이 m/게 t레다 sh/레다 sh/bぉb/v2. py#L143-L153
  • 기능 요약
  • result["rows"][]에 values를 그대로 던진다
  • columns의 정의에 맞지 않으면 결과가 나오지 않는다

  •     def add_result_row(result, values):
            """Helper function to add one row to results set.
            Parameters:
            :result dict: The result dict
            :values dict: One row of result in dict. The key should be one of the column names. The value is the value of the column in this row.
            """
    

    그런 결과를 만드는 코드를 re : dash에 써 보았습니다.


    result = {}
    add_result_column(result, 'id', 'id', 'integer')
    add_result_column(result, 'name', 'name', 'string')
    add_result_column(result, 'gender', 'gender', 'string')
    add_result_column(result, 'age', 'age', 'integer')
    add_result_row(result, {'id':10, 'name':'Yoshida', 'gender':'male', 'age':25})
    add_result_row(result, {'id':11, 'name':'Tanaka', 'gender':'female', 'age':22})
    



    (∩´∀`)∩

    결론



    우선 어떻게든 그것 같은 것 할 수 있었습니다!
    다음은 실제 DB에 쿼리를 던져 값을 가공하고 싶다면…

    또 다음 엔트리로 만나요.
    끝.

    Appendix



    데이터 소스 결과 형식 정보



    사용할 수있는 것은 다음 유형입니다.
  • integer
  • float
  • boolean
  • string
  • datetime
  • date

  • re:dash의 모든 데이터 소스는 다음과 같은 결과를 JSON 형식으로 반환합니다.
    {
        "columns" : [
            {
               // 必須: 結果内で重複しないカラム名を付ける
               "name" : "COLUMN_NAME",
               // 必須: カラムのフレンドリ名。現在は未使用なのでnameと一緒で大丈夫
               "friendly_name" : "FRIENDLY_NAME",
               // サポートされてる型はinteger, float, boolean, string (デフォルト), datetime (ISO-8601形式)
               // 型が不明ならstringを使うこと 
               "type" : "VALUE_TYPE"
            },
            ...
        ],
        "rows" : [
            {
                // nameにはカラム定義に含まれているnameを使う
                // VALUEはJSONとして有効な値を使う。日付型はISO-8601形式の文字列で。
                "name" : VALUE,
                "name2" : VALUE2
            },
            ...
        ]
    }
    

    예:
    {
      "columns": [
        {
          "name": "date",
          "type": "date",
          "friendly_name": "date"
        },
        {
          "name": "day_number",
          "type": "integer",
          "friendly_name": "day_number"
        },
        {
          "name": "value",
          "type": "integer",
          "friendly_name": "value"
        },
        {
          "name": "total",
          "type": "integer",
          "friendly_name": "total"
        }
      ],
      "rows": [
        {
          "value": 40832,
          "total": 53141,
          "day_number": 0,
          "date": "2014-01-30"
        },
        {
          "value": 27296,
          "total": 53141,
          "day_number": 1,
          "date": "2014-01-30"
        },
        {
          "value": 22982,
          "total": 53141,
          "day_number": 2,
          "date": "2014-01-30"
        }
      ]
    }
    

    좋은 웹페이지 즐겨찾기