Actualmente, la compatibilidad con el filtrado de datos de nivel de fila para un origen solo está disponible para la variable Google BigQuery y Snowflake fuentes.
Este tutorial proporciona pasos sobre cómo filtrar datos de nivel de fila para un origen mediante el Flow Service API.
Este tutorial requiere tener una comprensión práctica de los siguientes componentes de Adobe Experience Platform:
Para obtener información sobre cómo realizar llamadas correctamente a las API de Platform, consulte la guía de introducción a las API de Platform.
A continuación se describen los pasos a seguir para filtrar los datos de nivel de fila del origen.
Antes de poder utilizar la API para filtrar datos de nivel de fila para un origen, debe recuperar los detalles de especificación de conexión de la fuente para determinar los operadores y el idioma que admite un origen específico.
Para recuperar una especificación de conexión de un origen determinado, realice una solicitud de GET al /connectionSpecs
punto final del Flow Service al proporcionar el nombre de propiedad de su origen como parte de sus parámetros de consulta.
Formato de API
GET /connectionSpecs/{QUERY_PARAMS}
Parámetro | Descripción |
---|---|
{QUERY_PARAMS} |
Los parámetros de consulta opcionales por los que filtrar los resultados. Puede recuperar el Google BigQuery especificación de conexión aplicando la name propiedad y especificar "google-big-query" en la búsqueda. |
Solicitud
La siguiente solicitud recupera las especificaciones de conexión para Google BigQuery.
curl -X GET \
'https://platform.adobe.io/data/foundation/flowservice/connectionSpecs?property=name=="google-big-query"' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}'
Respuesta
Una respuesta correcta devuelve las especificaciones de conexión para Google BigQuery, incluida información sobre el idioma de consulta admitido y los operadores lógicos.
La siguiente respuesta de API se trunca para su brevedad.
"attributes": {
"filterAtSource": {
"enabled": true,
"queryLanguage": "SQL",
"logicalOperators": [
"and",
"or",
"not"
],
"comparisonOperators": [
"=",
"!=",
"<",
"<=",
">",
">=",
"like",
"in"
],
"columnNameEscapeChar": "`",
"valueEscapeChar": "'"
}
Propiedad | Descripción |
---|---|
attributes.filterAtSource.enabled |
Determina si el origen consultado admite el filtrado para datos de nivel de fila. |
attributes.filterAtSource.queryLanguage |
Determina el idioma de consulta que admite el origen consultado. |
attributes.filterAtSource.logicalOperators |
Determina los operadores lógicos que se pueden usar para filtrar datos de nivel de fila para el origen. |
attributes.filterAtSource.comparisonOperators |
Determina los operadores de comparación que se pueden usar para filtrar datos de nivel de fila para el origen. Consulte la siguiente tabla para obtener más información sobre los operadores de comparación. |
attributes.filterAtSource.columnNameEscapeChar |
Determina el carácter que se utiliza para aplicar secuencias de escape a las columnas. |
attributes.filterAtSource.valueEscapeChar |
Determina cómo se rodearán los valores al escribir una consulta SQL. |
Operador | Descripción |
---|---|
== |
Filtra si la propiedad es igual al valor proporcionado. |
!= |
Filtra si la propiedad no es igual al valor proporcionado. |
< |
Filtra si la propiedad es menor que el valor proporcionado. |
> |
Filtra si la propiedad es buena que el valor proporcionado. |
<= |
Filtra si la propiedad es menor o igual que el valor proporcionado. |
>= |
Filtra por si la propiedad es buena o igual al valor proporcionado. |
like |
Filtros que se utilizan en una WHERE para buscar un patrón especificado. |
in |
Filtra si la propiedad se encuentra dentro de un intervalo especificado. |
Una vez identificados los operadores lógicos y el lenguaje de consulta que admite el origen, puede utilizar el lenguaje de consulta de perfil (PQL) para especificar las condiciones de filtrado que desea aplicar a los datos de origen.
En el ejemplo siguiente, las condiciones se aplican solo a los datos seleccionados que coinciden con los valores proporcionados para los tipos de nodo enumerados como parámetros.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "city"
},
{
"nodeType": "literal",
"value": "DDN"
}
]
}
}
Puede obtener una vista previa de los datos realizando una solicitud de GET al /explore
punto final del Flow Service API mientras proporciona filters
como parte de los parámetros de consulta y especificación de las condiciones de entrada de PQL en Base64.
Formato de API
GET /connections/{BASE_CONNECTION_ID}/explore?objectType=table&object={TABLE_PATH}&preview=true&filters={FILTERS}
Parámetro | Descripción |
---|---|
{BASE_CONNECTION_ID} |
El ID de conexión base del origen. |
{TABLE_PATH} |
La propiedad path de la tabla que desea inspeccionar. |
{FILTERS} |
Las condiciones de filtrado de PQL están codificadas en Base64. |
Solicitud
curl -X GET \
'https://platform.adobe.io/data/foundation/flowservice/connections/89d1459e-3cd0-4069-acb3-68f240db4eeb/explore?objectType=table&object=TESTFAS.FASTABLE&preview=true&filters=ewogICJ0eXBlIjogIlBRTCIsCiAgImZvcm1hdCI6ICJwcWwvanNvbiIsCiAgInZhbHVlIjogewogICAgIm5vZGVUeXBlIjogImZuQXBwbHkiLAogICAgImZuTmFtZSI6ICJhbmQiLAogICAgInBhcmFtcyI6IFsKICAgICAgewogICAgICAgICJub2RlVHlwZSI6ICJmbkFwcGx5IiwKICAgICAgICAiZm5OYW1lIjogImxpa2UiLAogICAgICAgICJwYXJhbXMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJub2RlVHlwZSI6ICJmaWVsZExvb2t1cCIsCiAgICAgICAgICAgICJmaWVsZE5hbWUiOiAiY2l0eSIKICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJub2RlVHlwZSI6ICJsaXRlcmFsIiwKICAgICAgICAgICAgInZhbHVlIjogIk0lIgogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgXQogIH0KfQ==\' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {IMS_ORG}' \
-H 'x-sandbox-name: {SANDBOX_NAME}'
Respuesta
Una solicitud correcta devuelve la siguiente respuesta.
{
"format": "flat",
"schema": {
"columns": [
{
"name": "FIRSTNAME",
"type": "string",
"xdm": {
"type": "string"
}
},
{
"name": "LASTNAME",
"type": "string",
"xdm": {
"type": "string"
}
},
{
"name": "CITY",
"type": "string",
"xdm": {
"type": "string"
}
},
{
"name": "AGE",
"type": "string",
"xdm": {
"type": "string"
}
},
{
"name": "HEIGHT",
"type": "string",
"xdm": {
"type": "string"
}
},
{
"name": "ISEMPLOYED",
"type": "boolean",
"xdm": {
"type": "boolean"
}
},
{
"name": "POSTG",
"type": "boolean",
"xdm": {
"type": "boolean"
}
},
{
"name": "LATITUDE",
"type": "double",
"xdm": {
"type": "number"
}
},
{
"name": "LONGITUDE",
"type": "double",
"xdm": {
"type": "number"
}
},
{
"name": "JOINEDDATE",
"type": "string",
"meta:xdmType": "date-time",
"xdm": {
"type": "string",
"format": "date-time"
}
},
{
"name": "CREATEDAT",
"type": "string",
"meta:xdmType": "date-time",
"xdm": {
"type": "string",
"format": "date-time"
}
},
{
"name": "CREATEDATTS",
"type": "string",
"meta:xdmType": "date-time",
"xdm": {
"type": "string",
"format": "date-time"
}
}
]
},
"data": [
{
"CITY": "MZN",
"LASTNAME": "Jain",
"JOINEDDATE": "2022-06-22T00:00:00",
"LONGITUDE": 1000.222,
"CREATEDAT": "2022-06-22T17:19:33",
"FIRSTNAME": "Shivam",
"POSTG": true,
"HEIGHT": "169",
"CREATEDATTS": "2022-06-22T17:19:33",
"ISEMPLOYED": true,
"LATITUDE": 2000.89,
"AGE": "25"
},
{
"CITY": "MUM",
"LASTNAME": "Kreet",
"JOINEDDATE": "2022-09-07T00:00:00",
"LONGITUDE": 10500.01,
"CREATEDAT": "2022-09-07T17:19:33",
"FIRSTNAME": "Rakul",
"POSTG": true,
"HEIGHT": "155",
"CREATEDATTS": "2022-09-07T17:19:33",
"ISEMPLOYED": false,
"LATITUDE": 2500.89,
"AGE": "42"
},
{
"CITY": "MAN",
"LASTNAME": "Lee",
"JOINEDDATE": "2022-09-14T00:00:00",
"LONGITUDE": 1000.222,
"CREATEDAT": "2022-09-14T05:02:33",
"FIRSTNAME": "Denzel",
"POSTG": true,
"HEIGHT": "185",
"CREATEDATTS": "2022-09-14T05:02:33",
"ISEMPLOYED": true,
"LATITUDE": 123.89,
"AGE": "16"
}
]
}
Para crear una conexión de origen e ingerir datos filtrados, realice una solicitud de POST al /sourceConnections
al proporcionar las condiciones de filtrado como parte de los parámetros de su cuerpo.
Formato de API
POST /sourceConnections
Solicitud
La siguiente solicitud crea una conexión de origen para introducir datos de test1.fasTestTable
donde city
= DDN
.
curl -X POST \
'https://platform.adobe.io/data/foundation/flowservice/sourceConnections' \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-H 'Content-Type: application/json' \
-d '{
"name": "BigQuery Source Connection",
"description": "Source Connection for Filter test",
"baseConnectionId": "89d1459e-3cd0-4069-acb3-68f240db4eeb",
"data": {
"format": "tabular"
},
"params": {
"tableName": "test1.fasTestTable",
"filters": {
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "city"
},
{
"nodeType": "literal",
"value": "DDN"
}
]
}
}
},
"connectionSpec": {
"id": "3c9b37f8-13a6-43d8-bad3-b863b941fedd",
"version": "1.0"
}
}'
Respuesta
Una respuesta correcta devuelve el identificador único (id
) de la conexión de origen recién creada.
{
"id": "b7581b59-c603-4df1-a689-d23d7ac440f3",
"etag": "\"ef05d265-0000-0200-0000-6019e0080000\""
}
Esta sección proporciona más ejemplos de diferentes cargas útiles para el filtrado.
Puede omitir la fnApply
para escenarios que solo requieren una condición.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "like",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "firstname"
},
{
"nodeType": "literal",
"value": "%s"
}
]
}
}
in
operadorConsulte la carga útil de ejemplo siguiente para ver un ejemplo del operador in
.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "and",
"params": [
{
"nodeType": "fnApply",
"fnName": "in",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "firstname"
},
{
"nodeType": "literal",
"value": [
"Ramen",
"John"
]
}
]
}
]
}
}
isNull
operadorConsulte la carga útil de ejemplo siguiente para ver un ejemplo del operador isNull
.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "isNull",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "complaint_type"
}
]
}
}
NOT
operadorConsulte la carga útil de ejemplo siguiente para ver un ejemplo del operador NOT
.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "NOT",
"params": [
{
"nodeType": "fnApply",
"fnName": "isNull",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "complaint_type"
}
]
}
]
}
}
Consulte la carga útil de ejemplo siguiente para ver un ejemplo de condiciones anidadas complejas.
{
"type": "PQL",
"format": "pql/json",
"value": {
"nodeType": "fnApply",
"fnName": "and",
"params": [
{
"nodeType": "fnApply",
"fnName": ">=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "age"
},
{
"nodeType": "literal",
"value": 20
}
]
},
{
"nodeType": "fnApply",
"fnName": "<=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "age"
},
{
"nodeType": "literal",
"value": 30
}
]
},
{
"nodeType": "fnApply",
"fnName": "or",
"params": [
{
"nodeType": "fnApply",
"fnName": "!=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "city"
},
{
"nodeType": "literal",
"value": "PUD"
}
]
},
{
"nodeType": "fnApply",
"fnName": "=",
"params": [
{
"nodeType": "fieldLookup",
"fieldName": "joinedDate"
},
{
"nodeType": "literal",
"value": "2020-04-22"
}
]
}
]
}
]
}
}