как применить схему одного фрейма данных к другому пустому фрейму данных с помощью вызова rest

#palantir-foundry #foundry-code-repositories #foundry-data-connection

Вопрос:

У меня есть два набора данных в литейном производстве : df1 и df2, в df1 есть данные со схемой.

df2-это пустой фрейм данных без примененной схемы.

Используя прокси-сервер данных, я смог извлечь схему из df1

 {
  "foundrySchema": {
    "fieldSchemaList": [
      {...

 }
    ],
    "primaryKey": null,
    "dataFrameReaderClass": "n/a",
    "customMetadata": {}
  },
  "rows": []
}
 

как я могу применить эту схему к пустому кадру данных df2 с помощью вызова rest ?

В приведенном ниже примере литейного производства показано, как зафиксировать пустую транзакцию, в этом примере не показано, как применить схему

 curl -X POST 
  -H "Authorization: Bearer ${TOKEN}" 
  -H "Content-Type: application/json" 
  -d '{}' 
  "${CATALOG_URL}/api/catalog/datasets/${DATASET_RID}/transactions/${TRANSACTION_RID}/commit"
 

Комментарии:

1. если вы говорите о копировании схем между кадрами данных в репозиториях кода, то это скорее вопрос pyspark или spark. Но затем вы говорите, что не хотите его создавать, что делает вопрос двусмысленным. Не могли бы вы более подробно рассказать о том, что вы пытаетесь сделать?

2. привет @fmsf, спасибо за ваш ответ, я материализую наборы данных cdc, у меня есть наборы данных моментальных снимков, для которых нет наборов данных транзакций, прямо сейчас я создаю пустой набор данных транзакций, а затем вручную применяю схему из набора данных моментальных снимков к набору данных транзакций для материализации набора данных, есть около 90 таблиц моментальных снимков , в которых нет соответствующей таблицы транзакций, я изучал возможность автоматизации этого ручного процесса, возможно, в вызове python rest или если у вас есть какие-либо предложения, оцените это

3. @fmsf, я смог получить схему с помощью foundry-data-proxy rest api для набора данных моментальных снимков, как я могу обновить схему для набора данных пустой транзакции с помощью вызова rest?

4. я исправил вопрос, чтобы добавить к нему больше деталей

5. спасибо, что прояснили это, а пока, похоже, вы получили то, что хотели от @nicornk (ty)

Ответ №1:

Вот функция Python для загрузки схемы для набора данных с зафиксированной транзакцией:

 from urllib.parse import quote_plus
import requests


def upload_dataset_schema(dataset_rid: str,
                          transaction_rid: str, schema: dict, token: str, branch='master'):
    """
    Uploads the foundry dataset schema for a dataset, transaction, branch combination
    Args:
        dataset_rid: The rid of the dataset
        transaction_rid: The rid of the transaction
        schema: The foundry schema
        branch: The branch

    Returns: None

    """
    base_url = "https://foundry-instance/foundry-metadata/api"
    response = requests.post(f"{base_url}/schemas/datasets/"
                             f"{dataset_rid}/branches/{quote_plus(branch)}",
                             params={'endTransactionRid': transaction_rid},
                             json=schema,
                             headers={
                                 'content-type': "application/json",
                                 'authorization': f"Bearer {token}",
                             }
                             )
    response.raise_for_status()
 

Комментарии:

1. это то, что я искал