Передача данных в MSTR (инструмент микростратегии) ​​через Spark - PullRequest
0 голосов
/ 25 марта 2019

Я могу аутентифицировать, создавать кубы и вставлять данные в кубы MSRT, используя python. Нужно понять, можно ли это сделать через Spark-Scala.

Ниже приведены 3 функции Python, в которых я попытался и успешно вставил данные в кубы MSTR. То же самое мне нужно сделать со Scala. Пожалуйста, дайте мне знать, как мне поступить

def login(base_url, api_login, api_password):
    print("Getting token...")
    data_get = {'username': api_login,
                'password': api_password,
                'loginMode': 1}
    r = requests.post(base_url + 'auth/login', data=data_get)
    if r.ok:
        authToken = r.headers['X-MSTR-AuthToken']
        cookies = dict(r.cookies)
        print("Token: " + authToken)
        return authToken, cookies
    else:
        print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))


def create_cube(base_url, auth_token, cookies, project_id, cube_structure_json):
    headers_cc = {'X-MSTR-AuthToken': auth_token,
                  'Content-Type': 'application/json',  # IMPORTANT!
                  'Accept': 'application/json',
                  'X-MSTR-ProjectID': project_id}
    print("\nCreating new cube...")
    r = requests.post(base_url + "datasets", headers=headers_cc, data=cube_structure_json, cookies=cookies)
    if r.ok:
        print("Error: " + str(r.raise_for_status()) + "   ||   HTTP Status Code: " + str(r.status_code))
        print("\nCube CREATED successfully")
        print("\nCube ID:     " + r.json()['datasetId'])
        datasetId = r.json()['datasetId']
        print("Cube Name:   " + r.json()['name'])
        print("Table ID:    " + r.json()['tables'][0]['id'])
        tablesid = r.json()['tables'][0]['id']
        print("Table Name:  " + r.json()['tables'][0]['name'])
        print(
            "\nRemember to copy and note down Cube ID (dataset ID) and Table ID. Enter those values in the Python script 'Parameters' section")
        return datasetId, tablesid
    else:
        print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))


def push_data(updatePolicy, insert_data_json, auth_token, cookies, project_id, datasetId, table_name):
    #pushed_data = base64.b64encode(bytes(pushed_data_json, 'utf-8')).decode('ascii')
    push_url = base_url + "datasets/" + datasetId + "/tables/" + table_name
    headers_push = {'X-MSTR-AuthToken': auth_token,
                    'Content-Type': 'application/json',#IMPORTANT!
                    'X-MSTR-ProjectID': project_id,
                    'updatePolicy': updatePolicy
                    }
    print("\nPushing data...")
    r = requests.patch(push_url, headers=headers_push, data=insert_data_json, cookies=cookies)
    if r.ok:
        print("Pushed successfully...")
        print("Error: " + str(r.raise_for_status()) + "   ||   HTTP Status Code: " + str(r.status_code))
    else:
        print("HTTP %i - %s, Message %s" % (r.status_code, r.reason, r.text))

Ожидания: необходимо перенести данные в кубы MSTR в режиме реального времени.

...