MicroStrategy ONE

Scrivere uno script di origine dati Python

A partire da MicroStrategy ONE aggiornamento 11, per utilizzare un'origine dati Python è necessario scrivere uno script Python che sarà utilizzato come connessione per l'origine dati.

Funzioni script origine dati

È necessario utilizzare le tre funzioni seguenti nello script dell'origine dati:

  1. browse()

    Copia
    def browse():
    """
    Description: retrieve the catalog information.
    Input: no input is needed for this function.
    Return: the result is returned as a dict object.The keys of the dict should be
        table names of the python data source, and the values are normalized in Pandas
        DataFrame format. Each DataFrame value will contain a table's column infos. 
    """

    Questa funzione di ricerca si attiva quando un utente tenta di connettere un'origine dati tramite un connettore Python. Quando si connette, l'origine dati restituisce tutte le informazioni di catalogo dell'origine dati. I nomi delle tabelle e le colonne vengono visualizzati sotto l'origine dati.

  2. preview()

    Copia
    def preview(table_name, row_limit):
    """
    Description: get partial data for preview, data refine and schema change
    Input: there are 2 parameters for preview.
        - table_name: a table name should be selected if someone want to preview 
            the table.
        - row_limit: the row limitation is used to define the scale when only 
            partial data is retrieved during the preview.    
    Return: the result is returned as a Pandas DataFrame format object. Only the
        "row_limit" rows would be returned in the DataFrame object.
    """

    La funzione di anteprima si attiva quando un utente fa doppio clic per aggiungere una tabella o fa clic per visualizzare in anteprima una tabella.

  3. publish()

    Copia
    def publish(table_name):
    """
    Description: get the data published and stored the data into the cube
    Input: the table_name parameter is needed to define witch table should
        be published.
    Return: the result is returned as a Pandas DataFrame format object. All
        data needs to be returned for publishing.
    """

    La funzione di pubblicazione si attiva quando un utente fa clic su Salva per pubblicare un cubo. Tutti i dati della tabella vengono recuperati per l'uso da parte dell'utente.

    Per ulteriori informazioni su Pandas DataFrame, vedere 10 minuti per i panda.

Esempio di script di origine dati

Vedere il seguente esempio di connettore zoom. Gli utenti possono connettersi per ingrandire le risorse con le API in un'origine dati Python per recuperare tutti i dati desiderati. L'esempio include una variabile denominata Token nello script dell'origine dati per l'autenticazione.

Copia
import requests
import pandas
meeting_columns = ["uuid", "id", "host_id", "topic", "type", "start_time", "duration", "timezone", "created_at",
                   "join_url"]
token = $Token
headers = {'authorization': f'Bearer {token}'}
meeting_url = "https://api.zoom.us/v2/users/me/meetings"

def get_columns(table_name) -> list:
    if table_name == 'meetings':
        return meeting_columns
    else:
        raise ValueError(f'Given table name is not supported: {table_name}.')

def get_data(table_name: str, row_limit: [int, None] = None) -> pandas.DataFrame:
    table_columns = get_columns(table_name)
    output_df = pandas.DataFrame(None)
    row_count = 0
    page_number = 0
    while True:
        response_total = requests.get(meeting_url + (f'?page_number={page_number}' if page_number > 0 else ''),
                                      headers=headers).json()
        total_records = response_total.get('total_records')
        if total_records == 0:
            output_df = pandas.DataFrame(None, columns=table_columns, dtype='string')
        row_limit = row_limit if isinstance(row_limit, int) else total_records
        page_size = response_total.get('page_size', 0)
        total_records = total_records or page_size
        if table_name not in response_total:
            raise ValueError(f'Failed to find {table_name} in response')
        # Create pandas dataframe using response data
        response = response_total[table_name]
        df = pandas.DataFrame(response)
        # Adjust data types
        df['duration'] = df['duration'].astype('int32')
        df['type'] = df['type'].astype('int32')
        if output_df.empty:
            output_df = df
        else:
            output_df.merge(df)
        row_count += page_size
        page_number += 1
        if row_count >= min(total_records, row_limit):
            break
    if isinstance(row_limit, int) and row_limit > 0:
        return output_df.head(row_limit)
    else:
        return output_df

def browse() -> dict:
    # You can create an empty dataframe and specify column data types.
    def generate_empty_dataframe(table_name: str) -> pandas.DataFrame:
        table_columns = get_columns(table_name)
        # Create empty dataframe with given column names.
        # These columns should be exactly the same with table schema.
        df = pandas.DataFrame(None, columns=table_columns, dtype='string')
        # If the column data is not string, please change them to correct data types.
        df['id'] = df['id'].astype('int64')
        df['duration'] = df['duration'].astype('int32')
        df['type'] = df['type'].astype('int32')
        return df
    return {table_name: generate_empty_dataframe(table_name) for table_name in ['meetings']}

def preview(table_name: str, row_limit: int) -> pandas.DataFrame:
    return get_data(table_name, row_limit)

def publish(table_name: str) -> pandas.DataFrame:
    return get_data(table_name)