#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. это то, что я искал