Как проанализировать полный набор записей для набора данных с помощью вызова API?

Как я могу получить полные записи набора данных с помощью вызова Foundry API? Я хочу использовать набор данных в другом приложении Python за пределами Foundry, и с использованием requests приходят только первые 300 строк записей. У меня есть конечная точка requests API, использующая Contour dataset-preview.


person Asher    schedule 09.02.2021    source источник
comment
Не могли бы вы лучше описать, что вы пытаетесь сделать? Вы пытаетесь экспортировать данные из Foundry в другое приложение или пытаетесь загрузить набор данных? Если набор данных составляет 100 ГБ данных, вы собираетесь загружать все это?   -  person fmsf    schedule 09.02.2021
comment
это всего 100 тыс. записей, и я хочу проанализировать все данные в другом приложении. Я намерен использовать запросы python для анализа данных в кадре данных pandas для использования в моем приложении.   -  person Asher    schedule 09.02.2021
comment
@Asher, хотя это возможно, разве ты не можешь просто сделать любое преобразование, которое тебе нужно, в литейном цехе? Это своего рода смысл использования этого в первую очередь. Он поддерживает загрузку данных в фреймы данных pandas, загрузку произвольных библиотек python, построение графиков и т. д., поэтому вполне вероятно, что то, что вам нужно сделать, возможно без загрузки каких-либо данных. Недостатком загрузки данных является то, что любые полученные вами результаты не связаны с цепочкой происхождения/причинно-следственной связи, видимой в Foundry, не обновляются автоматически, и могут возникнуть проблемы с законом/соблюдением (например, удаление GDPR).   -  person Jonathan Ringstad    schedule 09.02.2021
comment
@JonathanRingstad, спасибо за это ценное понимание, одна из основных причин этого связана с тем, что литейное производство ограничено IP-адресом, и поэтому сделать визуализацию доступной на мобильном телефоне в настоящее время для нас непросто, если у вас есть лучшее решение для доступа к литейным данным в визуализация, такая как Power Bi на мобильных устройствах, пожалуйста, поделитесь с нами.   -  person Asher    schedule 10.02.2021
comment
@Asher спросите своего представителя Palantir о литейном мобильном телефоне или о том, можно ли ослабить ограничения IP, я бы сказал. В любом случае, если вы хотите загрузить данные, я бы порекомендовал просто перейти на вкладку сведений о наборах данных и загрузить файлы (вероятно, паркетные файлы, которые используются по умолчанию для большинства). Если файлов слишком много, вы можете выполнить преобразование. это просто делает repartition(1) или около того, чтобы уменьшить его до одного (большого) паркетного файла. Затем эти файлы паркета довольно легко загрузить в фреймы данных pandas в python, и вам не нужно будет жестко кодировать токены и т. Д. В вашем скрипте (проблемы безопасности)   -  person Jonathan Ringstad    schedule 10.02.2021
comment
@JonathanRingstad я не знал, что есть литейный мобильный, я проверю это с Палантиром. у вас есть код преобразования для переразметки, я редко работал с необработанными файлами при авторинге кода   -  person Asher    schedule 10.02.2021
comment
@Asher для перераспределения вы можете просто создать пустое преобразование python из шаблона (тот, который просто вызывает identity в df), а затем просто заполнить функцию как что-то вроде return df.repartition(10) (чтобы превратить ее в 10 файлов). Вы, вероятно, не хотите превращать его в так мало файлов, чтобы каждый из них занимал много гигабайт. Я не знаю, может ли Palantir предложить Foundry Mobile для вашей организации на данный момент, я думаю, что это все еще бета-версия с выборочным развертыванием или что-то в этом роде (я не совсем в курсе этого)   -  person Jonathan Ringstad    schedule 10.02.2021


Ответы (1)


Существуют различные возможности запроса наборов данных в Foundry, в зависимости от размера набора данных и варианта использования. Вероятно, проще всего начать с прокси-запроса данных sql, потому что вам не нужно беспокоиться о базовом формате файла набора данных.

import requests
import pandas as pd

def query_foundry_sql(query, token, branch='master', base_url='https://foundry-instance.com') -> (list, list):
    """
    Queries the dataproxy query API with spark SQL.
    Example: query_foundry_sql("SELECT * FROM `/path/to/dataset` Limit 5000", "ey...")
    Args:
        query: the sql query
        branch: the branch of the dataset / query

    Returns: (columns, data) tuple. data contains the data matrix, columns the list of columns
    Can be converted to a pandas Dataframe:
    pd.DataFrame(data, columns)

    """
    response = requests.post(f"{base_url}/foundry-data-proxy/api/dataproxy/queryWithFallbacks",
                             headers={'Authorization': f'Bearer {token}'},
                             params={'fallbackBranchIds': [branch]},
                             json={'query': query})

    response.raise_for_status()
    json = response.json()
    columns = [e['name'] for e in json['foundrySchema']['fieldSchemaList']]
    return columns, json['rows']

columns, data = query_foundry_sql("SELECT * FROM `/Global/Foundry Operations/Foundry Support/iris` Limit 5000", 
                                  "ey...",
                                 base_url="https://foundry-instance.com")
df = pd.DataFrame(data=data, columns=columns)
df.head(5)
person nicornk    schedule 09.02.2021
comment
спасибо за то, что это охватывает именно то, что я ищу :) - person Asher; 10.02.2021