数据准备映射函数
- 主题:
- 数据准备
创建对象:
- 开发人员
数据准备函数可用于根据在源字段中输入的内容计算和计算值。
字段
字段名称可以是任何合法标识符 — 由字母、美元符号($
)或下划线字符(_
)开头的Unicode字母和数字构成的无限长序列。 变量名称也区分大小写。
如果字段名称不遵循此约定,则字段名称必须用${}
括起来。 因此,例如,如果字段名称为“First Name”或“First.Name”,则名称必须分别像${First Name}
或${First\.Name}
一样换行。
如果字段名称是以下保留关键字的 any,则必须使用${}{}
括起来:
new, mod, or, break, var, lt, for, false, while, eq, gt, div, not, null, continue, else, and, ne, true, le, if, ge, return, _errors, do, function, empty, size
此外,保留的关键字还包括此页面上列出的任何映射器函数。
可使用点表示法访问子字段中的数据。 例如,如果存在name
对象,要访问firstName
字段,请使用name.firstName
。
函数列表
下表列出了所有支持的映射函数,包括示例表达式及其生成的输出。
字符串函数
- STRING:将连接的字符串。
"Hi, there!"
\
进行转义: +, ?, ^, |, ., [, (, {, ), *, $, \
如果您包含多个字符作为分隔符,则分隔符将被视为多字符分隔符。- 字符串: 必需 需要拆分的字符串。
- REGEX: 可选 可用于拆分字符串的正则表达式。
["Hi,", "there"]
- 输入: 必需 正在搜索的字符串。
- SUBSTRING: 必需 在字符串中搜索的子字符串。
- START_POSITION: 可选 字符串中开始查找的位置。
- 发生次数: 可选 要从起始位置查找的第n个发生次数。 默认情况下,该值为1。
- 输入: 必需 输入字符串。
- TO_FIND: 必需 要在输入中查找的字符串。
- TO_REPLACE: 必需 将替换“TO_FIND”中的值的字符串。
- 输入: 必需 输入字符串。
- START_INDEX: 必需 子字符串开始处的输入字符串的索引。
- 长度: 必需 子字符串的长度。
lcase
- 输入: 必需 将转换为小写的字符串。
lcase(“HeLlO”)
ucase
- 输入: 必需 将转换为大写的字符串。
ucase(“HeLlO”)
\
进行转义: \
。 如果您包含多个分隔符,则字符串将拆分到字符串中存在的 any 个分隔符中。 注意: 此函数只从字符串返回非null索引,而不管是否存在分隔符。 如果结果数组中需要所有索引(包括null),请改用“explode”函数。- INPUT: 必需 要拆分的输入字符串。
- SEPARATOR: 必需 用于拆分输入的字符串。
["Hello", "world"]
- 分隔符: 必需 用于连接对象的字符串。
- 对象: 必需 将要联接的字符串数组。
join(SEPARATOR, [OBJECTS])
join(" ", to_array(true, "Hello", "world"))
- 输入: 必需 要填充的字符串。 此字符串可以为null。
- 计数: 必需 要填充的字符串的大小。
- 填充: 必需 用于填充输入的字符串。 如果为null或为空,则将被视为单个空格。
- 输入: 必需 要填充的字符串。 此字符串可以为null。
- 计数: 必需 要填充的字符串的大小。
- 填充: 必需 用于填充输入的字符串。 如果为null或为空,则将被视为单个空格。
- 字符串: 必需 要获取前“n”个字符的字符串。
- 计数: 必需 要从字符串中获取的“n”个字符。
- 字符串: 必需 要获取最后“n”个字符的字符串。
- 计数: 必需 要从字符串中获取的“n”个字符。
- 字符串: 必需 要删除空白的字符串。
- 字符串: 必需 要删除空白的字符串。
- 字符串: 必需 要删除空白的字符串。
- STRING1: 必需 要比较的第一个字符串。
- STRING2: 必需 要比较的第二个字符串。
- STRING1: 必需 要比较的第一个字符串。
- STRING2: 必需 要比较的第二个字符串。
正则表达式函数
- 字符串: 必需 从中提取组的字符串。
- REGEX: 必需 您希望组匹配的正则表达式。
- 字符串: 必需 要检查的字符串与正则表达式匹配。
- REGEX: 必需 要与之进行比较的正则表达式。
哈希函数
- 输入: 必需 要散列的纯文本。
- CHARSET: 可选 字符集的名称。 可能的值包括UTF-8、UTF-16、ISO-8859-1和US-ASCII。
- 输入: 必需 要散列的纯文本。
- CHARSET: 可选 字符集的名称。 可能的值包括UTF-8、UTF-16、ISO-8859-1和US-ASCII。
- 输入: 必需 要散列的纯文本。
- CHARSET: 可选 字符集的名称。 可能的值包括UTF-8、UTF-16、ISO-8859-1和US-ASCII。
- 输入: 必需 要散列的纯文本。
- CHARSET: 可选 字符集的名称。 可能的值包括UTF-8、UTF-16、ISO-8859-1和US-ASCII。
- 输入: 必需 要散列的纯文本。
- CHARSET: 可选 字符集的名称。 可能的值包括UTF-8、UTF-16、ISO-8859-1和US-ASCII。
URL函数
- URL: 必需 需要从中提取协议的URL。
- URL: 必需 需要从中提取主机的URL。
- URL: 必需 需要从中提取端口的URL。
- URL: 必需 需要从中提取路径的URL。
- FULL_PATH: 可选 一个布尔值,用于确定是否返回完整路径。 如果设置为false,则仅返回路径的结尾。
- URL: 必需 尝试从中获取查询字符串的URL。
- 锚点: 必需 确定如何处理查询字符串中的锚点。 可以是以下三个值之一:“保留”、“移除”或“附加”。
如果该值为“保留”,则锚点将附加到返回的值。
如果值为“remove”,则将从返回值中删除锚点。
如果值为“附加”,则锚点将作为单独值返回。
get_url_query_str("foo://example.com:8042 /over/there?name=ferret#nose", "remove")
get_url_query_str("foo://example.com:8042/over/there?name=ferret#nose", "append")
{"name": "ferret#nose"}
{"name": "ferret"}
{"name": "ferret", "_anchor_": "nose"}
- URL: 必需 包含要替换或编码为ASCII字符的特殊字符的输入URL。
- URL: 必需 包含要解码为特殊字符的ASCII字符的输入URL。
日期和时间函数
date
函数的更多信息,请参阅数据格式处理指南的日期部分。2021-10-26T10:10:24Z
- 日期: 必需 要设置格式的输入日期,即ZonedDateTime对象。
- 格式: 必需 要将日期更改为的格式。
yyyy-MM-dd HH:mm:ss
")2019-10-23 11:24:35
- 时间戳: 必需 要设置格式的时间戳。 这是以毫秒为单位编写的。
- 格式: 必需 您希望时间戳变为的格式。
yyyy-MM-dd'T'HH:mm:ss.SSSX
")2019-10-23T11:24:35.000Z
- 日期: 必需 表示日期的字符串。
- 格式: 必需 表示源日期格式的字符串。注意: 这 不 表示要将日期字符串转换为的格式。
- DEFAULT_DATE: 必需 如果提供的日期为null,则返回默认日期。
2019-10-23T11:24:00Z
- 日期: 必需 表示日期的字符串。
- 格式: 必需 表示源日期格式的字符串。注意: 这 不 表示要将日期字符串转换为的格式。
2019-10-23T11:24:00Z
- 日期: 必需 表示日期的字符串。
"year"
"yyyy"
"yy"
"quarter"
"qq"
"q"
"month"
"mm"
"m"
"dayofyear"
"dy"
"y"
"day"
"dd"
"d"
"week"
"ww"
"w"
"weekday"
"dw"{20"
- 组件: 必需 表示日期部分的字符串。
- 日期: 必需 标准格式的日期。
"year"
"yyyy"
"yy"
"month"
"mm"
"m"
"day"
"dd"
"d"
"hour"
"hh"
"minute"
"mi"
"n"
"second"
"ss"
"s"
- 组件: 必需 表示日期部分的字符串。
- 值: 必需 为给定日期的组件设置的值。
- 日期: 必需 标准格式的日期。
- YEAR: 必需 用四位数字表示的年份。
- 月份: 必需 月份。 允许的值为1到12。
- 日: 必需 日。 允许的值为1到31。
- 小时:必需 小时。 允许的值为0到23。
- MINUTE: 必需 分钟。 允许的值为0到59。
- NANOSECOND: 必需 纳秒值。 允许的值为0到999999999。
- 时区: 必需 日期时间的时区。
2019-10-17T11:55:12Z
- 日期: 必需 尝试转换的日期。
zone_date_to_utc​(2019-10-17T11:55:​12 PST
2019-10-17T19:55:12Z
- 日期: 必需 尝试转换的日期。
- 区域: 必需 您尝试将日期转换为的时区。
zone_date_to_zone(now(), "Europe/Paris")
2021-10-26T15:43:59Z
层次结构 — 对象
- 输入: 必需 您尝试检查的对象为空。
is_empty([1, null, 2, 3])
- 输入: 必需 键和数组对的分组。
arrays_to_objects('sku', explode("id1|id2", '\\|'), 'price', [22.5,14.35])
[{ "sku": "id1", "price": 22.5 }, { "sku": "id2", "price": 14.35 }]
- 输入: 必需 键/值对的平面列表。
{"firstName": "John", "lastName": "Doe"}
- 字符串: 必需 正在分析以创建对象的字符串。
- VALUE_DELIMITER: 可选 用于将字段与值分开的分隔符。 默认分隔符为
:
。 - FIELD_DELIMITER: 可选 用于分隔字段值对的分隔符。 默认分隔符为
,
。
get()
函数以及str_to_object()
来检索字符串中键的值。- 示例#1: str_to_object("firstName - John ; lastName - ; - 123 345 7890", "-", ";")
- 示例#2: str_to_object("firstName - John ; lastName - ; phone - 123 456 7890", "-", ";")。get("firstName")
- 示例#1:
{"firstName": "John", "lastName": "Doe", "phone": "123 456 7890"}
- 示例#2: "John"
is_set()
函数。- 输入: 必需 要检查的路径是否存在于源数据中。
null
。 当您不想将字段复制到目标架构时,应使用此字段。null
- 对象: 必需 从中提取键的对象。
["book1", "book2"]
- 字符串: 必需 要分析的字符串。
- KEY: 必需 必须提取其值的键。
- VALUE_DELIMITER: 必需 用于分隔字段和值的分隔符。 如果提供了
null
或空字符串,则此值为:
。 - FIELD_DELIMITER: 可选 用于分隔字段和值对的分隔符。 如果提供了
null
或空字符串,则此值为,
。
- 映射: 必需 输入映射数据。
- 密钥: 必需 密钥可以是单个字符串或字符串数组。 如果提供了任何其他基元类型(数据/数字),则会将其视为字符串。
- 映射: 必需 输入映射数据
- 密钥: 必需 密钥可以是单个字符串或字符串数组。 如果提供了任何其他基元类型(数据/数字),则会将其视为字符串。
- 密钥: 必需的 密钥必须是字符串。 如果提供了任何其他基元值(如整数或日期),则它们会自动转换为字符串并被视为字符串。
- ANY_TYPE: 必需 引用除映射之外的任何受支持的XDM数据类型。
- 对象: 必需 您可以提供传入对象或对象数组,并以键的形式指向对象内的属性。
- 对象: 必需 您可以提供传入对象或对象数组,并以键的形式指向对象内的属性。
有关对象复制功能的信息,请参阅下面的部分。
层次结构 — 数组
- INPUT: 必需 要查找的第一个非null对象的数组。
- 输入: 必需 要查找的第一个元素的数组。
- 输入: 必需 要查找的最后一个元素的数组。
- 数组: 必需 要将元素添加到的数组。
- VALUES:要附加到数组的元素。
- 数组: 必需 要将元素添加到的数组。
- 值:要附加到父数组的数组。
- INCLUDE_NULLS: 必需 布尔值,用于指示响应数组中是否包含null。
- 值: 必需 要转换为数组的元素。
[1, 2, 3]
- INPUT: 必需 您尝试查找大小的对象。
size_of([1, 2, 3, 4])
- 数组: 必需 要在配置文件中附加数组的数组。
upsert_array_append([123, 456])
- 数组: 必需 要替换配置文件中数组的数组。
upsert_array_replace([123, 456], 1)
- SEPARATOR: 必需 用于连接数组中元素的分隔符。
- 数组: 必需 要连接的数组(拼合后)。
array_to_string(";", ["Hello", "world"])
- 数组: 必需 要过滤的数组
- 谓词: 必需 要应用于给定数组的每个元素的谓词。
filterArray([5, -6, 0, 7], x -> x > 0)
- 数组: 必需 要转换的数组。
- 谓词: 必需 要应用于给定数组的每个元素的谓词。
transformArray([5, 6, 7], x -> x + 1)
- 数组: 必需 要平面化的数组。
层次结构 — 映射
- INPUT: 必需 要查找的第一个非null对象的对象数组。
- KEY: 必需 键必须是对象数组中的字段名称,并且对象必须是值。
- INPUT: 必需 要查找的第一个非null对象的对象数组。
"{line1 : \"345 park ave\",line2: \"bldg 2\",City : \"san jose\",State : \"CA\",type: \"office\"}"
"{\"firstName\" : \"John\", \"lastName\": \"Doe\"}"
逻辑运算符
- 密钥: 必需 要匹配的密钥。
- OPTIONS: 必需 键/值对的平面化数组。 或者,也可以在末尾放置默认值。
如果提供的stateCode为“pa”,则为“Pennsylvania”。
如果stateCode与以下内容不匹配,“不适用”。
- 表达式: 必需 正在计算的布尔表达式。
- TRUE_VALUE: 必需 如果表达式的计算结果为true,则返回的值。
- FALSE_VALUE: 必需 表达式计算结果为false时返回的值。
聚合
- OPTIONS: 必需 一个或多个可以相互比较的对象。
- OPTIONS: 必需 一个或多个可以相互比较的对象。
类型转换
- 字符串: 必需 要转换为BigInteger的字符串。
- 字符串: 必需 要转换为双精度类型的字符串。
- 字符串: 必需 要转换为浮点数的字符串。
- 字符串: 必需 要转换为整数的字符串。
JSON函数
- 字符串: 必需 要反序列化的JSON字符串。
特别操作
guid
guid()
guid()
c7016dc7-3163-43f7-afc7-2e1c9c206333
fpid_to_ecid
- 字符串: 必需 要转换为ECID的FPID字符串。
fpid_to_ecid(STRING)
fpid_to_ecid("4ed70bee-b654-420a-a3fd-b58b6b65e991")
"28880788470263023831040523038280731744"
用户代理功能
下表中包含的任何用户代理函数都可以返回以下任一值:
- 电话 — 屏幕较小的移动设备(通常小于7英寸)
- 移动设备 — 尚未识别的移动设备。 此移动设备可以是电子阅读器、平板电脑、手机、手表等。
有关设备字段值的详细信息,请阅读本文档附录中的设备字段值列表。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
- USER_AGENT: 必需 用户代理字符串。
Analytics函数
- EVENT_STRING: 必需 逗号分隔的Analytics事件字符串。
- EVENT_NAME: 必需 要从中提取的事件名称和ID。
- EVENT_STRING: 必需 逗号分隔的Analytics事件字符串。
- EVENT_NAME: 必需 要从中提取值的事件名称。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- EVENT_NAME: 必需 要从中提取值的事件名称。
- PRODUCTS_STRING: 必需 Analytics产品字符串。
- eVar_NAME: 必需 要提取的eVar名称。
对象复制
您可以使用对象复制功能自动复制对象的属性,而无需更改映射。 例如,如果源数据的结构为:
address{
line1: 4191 Ridgebrook Way,
city: San Jose,
state: California
}
XDM结构:
addr{
addrLine1: 4191 Ridgebrook Way,
city: San Jose,
state: California
}
然后,映射将变为:
address -> addr
address.line1 -> addr.addrLine1
在上述示例中,city
和state
属性在运行时也会自动摄取,因为address
对象已映射到addr
。 如果您要在XDM结构中创建line2
属性,并且您的输入数据在address
对象中还包含line2
,则它也将自动摄取,而无需手动更改映射。
要确保自动映射正常工作,必须满足以下先决条件:
- 父级对象应进行映射;
- 必须在XDM架构中创建新属性;
- 新属性在源架构和XDM架构中应有匹配的名称。
如果不满足任何先决条件,则必须使用数据准备手动将源架构映射到XDM架构。
附录
下面提供了有关使用数据准备映射函数的其他信息
特殊字符
下表概述了保留字符及其相应的编码字符。
设备字段值
下表概述了设备字段值及其相应说明。
useragents
。useragents
,不包含有关设备的信息。useragent
字符串中检测到脚本时使用此设备值。代码示例
map_get_values
example = "map_get_values(book_details,\"author\") where input is : {\n" +
" \"book_details\":\n" +
" {\n" +
" \"author\": \"George R. R. Martin\",\n" +
" \"price\": 17.99,\n" +
" \"ISBN\": \"ISBN-978-0553801477\"\n" +
" }\n" +
"}",
result = "{\"author\": \"George R. R. Martin\"}"
map_has_keys
example = "map_has_keys(book_details,\"author\")where input is : {\n" +
" \"book_details\":\n" +
" {\n" +
" \"author\": \"George R. R. Martin\",\n" +
" \"price\": 17.99,\n" +
" \"ISBN\": \"ISBN-978-0553801477\"\n" +
" }\n" +
"}",
result = "true"
add_to_map
example = "add_to_map(book_details, book_details2) where input is {\n" +
" \"book_details\":\n" +
" {\n" +
" \"author\": \"George R. R. Martin\",\n" +
" \"price\": 17.99,\n" +
" \"ISBN\": \"ISBN-978-0553801477\"\n" +
" }\n" +
"}" +
"{\n" +
" \"book_details2\":\n" +
" {\n" +
" \"author\": \"Neil Gaiman\",\n" +
" \"price\": 17.99,\n" +
" \"ISBN\": \"ISBN-0-380-97365-0\"\n" +
" \"publisher\": \"William Morrow\"\n" +
" }\n" +
"}",
result = "{\n" +
" \"book_details\":\n" +
" {\n" +
" \"author\": \"George R. R. Martin\",\n" +
" \"price\": 17.99,\n" +
" \"ISBN\": \"ISBN-978-0553801477\"\n" +
" \"publisher\": \"William Morrow\"\n" +
" }\n" +
"}",
returns = "A new map with all elements from map and addends"
object_to_map
语法1
example = "object_to_map(\"firstName\", \"John\", \"lastName\", \"Doe\")",
result = "{\"firstName\" : \"John\", \"lastName\": \"Doe\"}"
语法2
example = "object_to_map(address) where input is " +
"address: {line1 : \"345 park ave\",line2: \"bldg 2\",City : \"san jose\",State : \"CA\",type: \"office\"}",
result = "{line1 : \"345 park ave\",line2: \"bldg 2\",City : \"san jose\",State : \"CA\",type: \"office\"}"
语法3
example = "object_to_map(addresses,type)" +
"\n" +
"[\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City\": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"home\"\n" +
" },\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"work\"\n" +
" },\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"office\"\n" +
" }\n" +
"]" ,
result = "{\n" +
" \"home\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City\": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"home\"\n" +
" },\n" +
" \"work\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"work\"\n" +
" },\n" +
" \"office\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"office\"\n" +
" }\n" +
"}"
array_to_map
example = "array_to_map(addresses, \"type\") where addresses is\n" +
"\n" +
"[\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City\": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"home\"\n" +
" },\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"work\"\n" +
" },\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"office\"\n" +
" }\n" +
"]" ,
result = "{\n" +
" \"home\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City\": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"home\"\n" +
" },\n" +
" \"work\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"work\"\n" +
" },\n" +
" \"office\":\n" +
" {\n" +
" \"line1\": \"345 park ave\",\n" +
" \"line2\": \"bldg 2\",\n" +
" \"City \": \"san jose\",\n" +
" \"State\": \"CA\",\n" +
" \"type\": \"office\"\n" +
" }\n" +
"}",
returns = "Returns a map with given field name and value pairs or null if input is null"