9.18. 变换函数用法¶
9.18.1. 控制功能¶
9.18.1.1. 试试看¶
描述:执行另一个函数-如果失败,则使用默认值
用途: try($1, $2)
示例: try("1"::int, 0) = 1
示例: try("abcd"::int, 0) = 0
9.18.1.2. 使用默认设置¶
描述:如果值为空,则将值替换为第一个非空替代项
用途: withDefault($1, $2...)
示例: withDefault('foo', 'bar') = foo
示例: withDefault('foo', 'bar', 'baz') = foo
示例: withDefault(null, 'bar', 'baz') = bar
示例: withDefault(null, null, 'baz') = baz
9.18.1.3. 要求¶
描述:如果值为空,则抛出异常,否则返回值
用途: require($1)
示例: require('foo') = foo
示例: require(null) // throws an error
9.18.2. 字符串函数¶
9.18.2.1. 条带¶
描述:从字符串的开头或结尾删除字符。默认为空格。
用途: strip($1)
或 strip($1, $chars)
例如: strip('afoob', 'abc') = foo
strip('foao', 'abc') = foao
strip('\t foo ') = foo
9.18.2.2. 条形图报价¶
描述:从字符串的开头或结尾删除双引号或单引号
用途: stripQuotes($1)
例如: stripQuotes('"foo"') = foo
stripQuotes('\'foo\'') = foo
stripQuotes('fo"o') = fo"o
9.18.2.3. 条带前缀¶
描述:删除字符串开头的字符。将保留空格。
用途: stripPrefix($1, $chars)
例如: stripPrefix('afoob', 'abc') = foob
9.18.2.4. StripSuffix¶
描述:删除字符串末尾的字符。将保留空格。
用途: stripSuffix($1, $chars)
例如: stripSuffix('afoob', 'abc') = afoo
9.18.2.5. 删除¶
描述:从字符串中删除子字符串
用途: remove($1, $substring)
例如: remove('foabco', 'abc') = foo
9.18.2.6. 更换¶
描述:将文字字符串替换为另一个字符串
用途: replace($1, $toReplace, $replacement)
例如: replace('foobar', 'ob', 'ab') = foabar
9.18.2.7. 长度¶
描述:返回字符串的长度。
用途: length($1)
示例: length('foo') = 3
9.18.2.8. 修整¶
描述:从字符串周围裁剪空格。
用途: trim($1)
示例: trim(' foo ') = foo
9.18.2.9. 大写¶
描述:将字符串大写。
用途: capitalize($1)
示例: capitalize('foo') = Foo
9.18.2.10. 小写¶
描述:字符串小写。
用途: lowercase($1)
示例: lowercase('FOO') = foo
9.18.2.11. 大写¶
描述:字符串大写。
用途: uppercase($1)
示例: uppercase('foo') = FOO
9.18.2.12. RegexReplace¶
描述:用字符串中的目标模式替换给定的模式。
用途: regexReplace($regex, $replacement, $1)
示例: regexReplace('foo'::r, 'bar', 'foobar') = barbar
9.18.2.13. 串接¶
描述:连接两个字符串。
用途: concatenate($0, $1)
示例: concatenate('foo', 'bar') = foobar
9.18.2.14. 子串¶
说明:返回字符串的子串。
用途: substring($1, $startIndex, $endIndex)
示例: substring('foobarbaz', 2, 5) = oba
9.18.2.15. TO字符串¶
描述:将另一个数据类型转换为字符串。
用途: toString($0)
示例: concatenate(toString(5), toString(6)) = '56'
9.18.2.16. 空ToNull¶
描述:将空字符串替换为 null
。用于从带分隔符的文本文件设置可选属性,其中输入永远不会 null
。
用途: emptyToNull($0)
示例: emptyToNull('') = null
9.18.2.17. 列印¶
描述:设置自定义字符串的格式。作为实现细节,该函数委托给Java的字符串 formatting classes.
用途: printf('patterns', $arg1, $arg2, ...)'
- 例如:
printf('%s-%s-%sT00:00:00.000Z', '2015', '01', '01') = '2015-01-01T00:00:00.000Z'
printf('%2f', divide(-1, 2, 3)) = '-0.17'
9.18.3. 日期函数¶
下表按名称汇总了预定义的日期格式。对于与这些格式中的任何格式都不匹配的日期,可以将自定义格式与 date
功能。 secsToDate
和 millisToDate
可用于解析自Java时代以来的间隔。有关每个功能的完整说明,请参阅下面的内容。
功能 |
格式 |
示例 |
---|---|---|
基本等同日期 |
|
20150101 |
等轴测日期 |
|
2015-01-01 |
等位置日期 |
|
2015-01-01 |
基本日期时间无千位数 |
|
20150101 T000000Z |
基本日期时间 |
|
20150101T000000.000Z |
等同日期时间 |
|
2015-01-01:00:00 |
等位置日期时间 |
|
2015-01-01:00:00 |
等偏移日期时间 |
|
2015-01-01 T00:00:00Z |
日期小时分钟秒数 |
|
2015年01月01T00:00:00.000 |
日期时间 |
|
2015-01-01T00:00:00.000Z |
9.18.3.1. 现在¶
描述:使用当前系统时间。
用途: now()
9.18.3.2. 日期¶
描述:自定义日期解析器。日期格式由Java 8定义 DateTimeFormatter 班级。
用途: date($format, $1)
Example:
date('yyyy-MM-dd\\'T\\'HH:mm:ss.SSSSSS', '2015-01-01T00:00:00.000000')
9.18.3.3. 基本等同日期¶
描述:的日期格式 yyyyMMdd
,相当于java.time.format.DateTimeFormatter.BASIC_ISO_DATE.
用途: basicIsoDate($1)
示例: basicIsoDate('20150101')
9.18.3.4. 等轴测日期¶
描述:的日期格式 yyyy-MM-dd
,相当于java.time.Formatter.DateTimeFormatter.ISO_Date。
用途: isoDate($1)
示例: isoDate('2015-01-01')
9.18.3.5. 基本日期时间¶
说明:将基本日期和时间组合在一起的日期格式 yyyyMMdd'T'HHmmss.SSSZ
。
用途: basicDateTime($1)
示例: basicDateTime('20150101T000000.000Z')
9.18.3.6. 基本日期时间无千位数¶
描述:基本日期和时间相结合的基本格式,格式不含Millis yyyyMMdd'T'HHmmssZ
。
用途: basicDateTimeNoMillis($1)
示例: basicDateTimeNoMillis('20150101T000000Z')
9.18.3.7. 日期时间¶
描述:一个严格的ISO 8601日期格式解析器 yyyy-MM-dd'T'HH:mm:ss.SSSZZ
。
用途: dateTime($1)
示例: dateTime('2015-01-01T00:00:00.000Z')
9.18.3.8. 日期小时分钟秒数¶
描述:完整日期的格式化程序,格式保留前3个小数秒的时间 yyyy-MM-dd'T'HH:mm:ss.SSS
。
用途: dateHourMinuteSecondMillis($1)
示例: dateHourMinuteSecondMillis('2015-01-01T00:00:00.000')
9.18.3.9. 等同日期时间¶
描述:的日期格式 yyyy-MM-dd'T'HH:mm:ss
,相当于java.time.format.DateTimeFormatter.ISO_DATE_TIME.
用途: isoDateTime($1)
示例: isoDateTime('2015-01-01T00:00:00')
9.18.3.10. 等位置日期¶
描述:的日期格式 yyyy-MM-dd
,相当于java.time.format.DateTimeFormatter.ISO_LOCAL_DATE.
用途: isoLocalDate($1)
示例: isoLocalDate('2015-01-01')
9.18.3.11. 等位置日期时间¶
描述:的日期格式 yyyy-MM-dd'T'HH:mm:ss
,相当于java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME.
用途: isoLocalDateTime($1)
示例: isoLocalDateTime('2015-01-01T00:00:00')
9.18.3.12. 等偏移日期时间¶
描述:的日期格式 yyyy-MM-dd'T'HH:mm:ssZ
,相当于java.time.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME.
用途: isoOffsetDateTime($1)
示例: isoOffsetDateTime('2015-01-01T00:00:00Z')
9.18.3.13. 截止日期为毫秒¶
描述:使用表示自1970年1月1日以来的毫秒的长日期创建新日期。
用途: millisToDate($1)
示例: millisToDate('1449675054462'::long)
9.18.3.14. 截止日期为秒¶
描述:使用表示自1970年1月1日以来的秒的长日期创建新日期。
用途: secsToDate($1)
示例: secsToDate(1449675054)
9.18.3.15. 日期至字符串¶
描述:根据Java定义的模式,将日期格式化为字符串 DateTimeFormatter 。
用途: dateToString($pattern, $date)
Example: dateToString('yyyy-MM-dd\\'T\\'HH:mm:ss.SSSSSS', now())
9.18.3.16. Date ToMillis¶
描述:将日期转换为自Java纪元(1970年1月1日)以来的毫秒数。
用途: dateToMillis($date)
示例: dateToMillis(now())
9.18.4. 几何函数¶
9.18.4.1. 点¶
描述:从经度/纬度/z/m、wkt或wkb解析点几何图形。要创建带测量但不带z的点,请使用 pointM
。
用途: point($lon, $lat)
, point($lon, $lat, $z)
, point($lon, $lat, $z, $m)
或 point($wkt)
注意:排序在这里很重要...GeoMesa默认为经度优先
示例:从JSON解析经度/经度:
分析经度/经度
# config
{ name = "lon", json-type="double", path="$.lon" }
{ name = "lat", json-type="double", path="$.lat" }
{ name = "geom", transform="point($lon, $lat)" }
# data
{
"lat": 23.9,
"lon": 24.2,
}
示例:从文本分析经度/经度,而不创建经度/经度字段:
# config
{ name = "geom", transform="point($2::double, $3::double)" }
# data
id,lat,lon,date
identity1,23.9,24.2,2015-02-03
示例:将WKT解析为点
# config
{ name = "geom", transform="point($2)" }
# data
ID,wkt,date
1,POINT(2 3),2015-01-02
9.18.4.2. PointM¶
描述:从经度/经度解析点几何图形并测量
用途: pointM($lon, $lat, $measure)
示例: pointM(10::double,20::double,30::double)
9.18.4.3. 多点¶
描述:从WKT字符串、WKB字节数组或两个坐标列表解析多点。
用途: multipoint($0)
示例: multipoint('MULTIPOINT ((10 40), (40 30), (20 20), (30 10))')
示例: multipoint(list(10,40,20,30),list(40,30,20,10))
9.18.4.4. 线串¶
描述:从WKT字符串、WKB字节数组或两个坐标列表中解析行字符串。
用途: linestring($0)
示例: linestring('LINESTRING(102 0, 103 1, 104 0, 105 1)')
示例: linestring(list(102,103,104,105),list(0,1,0,1))
9.18.4.5. 多线串¶
描述:从WKT字符串或WKB字节数组解析多行字符串。
用途: multilinestring($0)
示例: multilinestring('MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))')
9.18.4.6. 多边形¶
描述:从WKT字符串或WKB字节数组解析多边形。
用途: polygon($0)
示例: polygon('POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))')
9.18.4.7. 多重多边形¶
描述:从WKT字符串或WKB字节数组解析多个多边形。
用途: multipolygon($0)
示例: multipolygon('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))')
9.18.4.8. GeometryCollection¶
描述:从WKT字符串或WKB字节数组解析几何图形集合。
用途: geometrycollection($0)
示例: geometrycollection('GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))')
9.18.4.9. 几何学¶
描述:从WKT字符串或WKB字节数组解析几何图形。
用途: geometry($0)
示例:将WKT解析为几何体
# config
{ name = "geom", transform="geometry($2)" }
# data
ID,wkt,date
1,POINT(2 3),2015-01-02
2,"LINESTRING(102 0, 103 1, 104 0, 105 1)",2015-01-03
9.18.4.10. 项目发件人¶
描述:将几何图形从其原生CRS投影到EPSG:4326。GeoMesa仅支持EPSG:4326,因此当从另一个CRS摄取时,必须转换几何图形。
用途: projectFrom('EPSG:3857',$0)
示例:将解析的点从EPSG:3857重新投影到EPSG:4326:
# config
{ name = "geom", transform="projectFrom('EPSG:3857',point($2::double, $3::double))" }
# data
id,x,y,date
identity1,1689200.14,1113194.91,2015-02-03
9.18.5. ID函数¶
9.18.5.1. 字符串到字节数¶
描述:将字符串转换为UTF-8字节数组(以传递给其他函数,如 md5()
)。
用途: stringToBytes($0)
示例: stringToBytes('row,of,data')
9.18.5.2. MD5¶
描述:从字节数组创建MD5哈希。
用途: md5($0)
示例: md5(stringToBytes('row,of,data'))
9.18.5.3. murmur3_32¶
描述:从字符串创建32位-3哈希。
用途: murmur3_32($0)
示例: murmur3_32('row,of,data')
9.18.5.4. murmur3_64¶
描述:从字符串创建64位-3哈希。请注意,以前该函数的命名不正确 murmur3_128
,并且仍然可以通过该名称调用。
用途: murmur3_64($0)
示例: murmur3_64('row,of,data')
9.18.5.5. MurMurHash3¶
描述:从作为十六进制字符串返回的字符串或字节数组创建128位-3哈希。
用途: murmurHash3($0)
示例: murmurHash3('row,of,data')
9.18.5.6. UUID¶
描述:生成随机UUID。
用途: uuid()
9.18.5.7. UuidZ3¶
描述:为点几何图形生成基于Z3的UUID。
用途: uuidZ3($geom, $date, $interval)
示例: uuidZ3(point('POINT (3 2)'), dateTime('2015-01-01T00:00:00.000Z'), 'week')
看见 配置Z索引时间间隔 有关Z3间隔的详细信息。
9.18.5.8. UuidZ3质心¶
描述:为非点几何图形生成基于Z3的UUID。
用途: uuidZ3Centroid($geom, $date, $interval)
示例: uuidZ3Centroid(linestring('LINESTRING(102 0, 103 1, 104 0, 105 1)', dateTime('2015-01-01T00:00:00.000Z'), 'week')
看见 配置Z索引时间间隔 有关Z3间隔的详细信息。
9.18.6. 类型转换¶
9.18.6.1. ::Int或::Integer¶
描述:将字符串转换为整数。无效值将导致记录失败。
示例: '1'::int = 1
9.18.6.2. **Long¶
描述:将字符串转换为长整型。无效值将导致记录失败。
示例: '1'::long = 1L
9.18.6.3. **花车¶
描述:将字符串转换为浮点数。无效值将导致记录失败。
示例: '1.0'::float = 1.0f
9.18.6.4. **双倍¶
描述:将字符串转换为双精度型。无效值将导致记录失败。
示例: '1.0'::double = 1.0d
9.18.6.5. *:布尔型¶
描述:将字符串转换为布尔值。无效值将导致记录失败。
示例: 'true'::boolean = true
9.18.6.6. ::R¶
描述:将字符串转换为Regex对象。
示例: 'f.*'::r = f.*: scala.util.matching.Regex
9.18.6.7. ToInt或toInteger¶
描述:将值转换为整数。如果转换失败,则返回NULL,除非定义了默认值。
用途: toInt($1, $2)
示例: toInt('1', 0) = 1
示例: toInt('', 0) = 0
示例: toInt('') = null
9.18.6.8. 托龙¶
描述:将值转换为长整型。如果转换失败,则返回NULL,除非定义了默认值。
用途: toLong($1, $2)
示例: toLong('1', 0L) = 1L
示例: toLong('', 0L) = 0L
示例: toLong('') = null
9.18.6.9. 漂浮¶
描述:将值转换为浮点数。如果转换失败,则返回NULL,除非定义了默认值。
用途: toFloat($1, $2)
示例: toFloat('1.0', 0.0f) = 1.0f
示例: toFloat('not a float', 0.0f) = 0.0f
示例: toFloat('') = null
9.18.6.10. 翻一番¶
描述:将值转换为双精度型。如果转换失败,则返回NULL,除非定义了默认值。
用途: toDouble($1, $2)
示例: toDouble('1.0', 0.0) = 1.0d
示例: toDouble(null, 0.0) = 0.0d
示例: toDouble('') = null
9.18.6.11. ToBoolean¶
描述:将值转换为布尔值。如果转换失败,则返回NULL,除非定义了默认值。如果输入的是一个数字,则等于零则计算为FALSE,否则为TRUE。
用途: toBoolean($1, $2)
示例: toBoolean('true', false) = true
示例: toBoolean('foo', false) = false
示例: toBoolean('') = null
9.18.6.12. IntToBoolean¶
描述:将整数转换为布尔值。遵循正常的转换规则,其中0为假,所有其他值为真。
用途: intToBoolean($1)
示例: intToBoolean(1) = true
示例: intToBoolean(0) = false
9.18.7. 数学函数¶
用途:
数学函数的参数必须是数字--整数、双精度、浮点数、长整型或数字字符串。
所有数学函数都返回双精度。如果需要另一种数据类型,则在之后转换该值,例如 add($1,$2)::long
数学函数接受多个参数,或者接受包含参数的单个java.util.List。
示例:
{ name = "value3", transform = "add($value1, multiply($value2, 1.2))::double" }
9.18.7.1. 添加¶
描述:将两个或多个值相加。
示例: add($1,$2)
示例: add($1,$2,"10")
示例: add(list(1,2,3))
9.18.7.2. 减法¶
描述:按顺序减去两个或多个值。
示例: subtract($1,$2)
示例: subtract($1,$2,1.0f)
相当于 ($1 - $2) - 1.0f
示例: subtract(list(3,1))
9.18.7.3. 成倍¶
描述:将两个或多个值相乘。
示例: multiply($1,$2)
示例: multiply($1,$2,0.01d)
示例: multiply(list(3,2))
9.18.7.4. 分割¶
描述:将两个或多个值按顺序相除。
示例: divide($1,$2)
示例: divide($1,$2,"15")
相当于 ($1/$2)/"15"
示例: divide(list(3,2))
9.18.7.5. 小气¶
描述:取两个或多个数字的平均值。
示例: mean($1,$2,$3)
示例: mean(list(1,2,3))
9.18.7.6. 最小¶
说明:查找至少两个或更多数字。
示例: min($1,$2,$3)
示例: min(list(1,2,3))
9.18.7.7. 最大值¶
说明:查找两个或多个数字中的最大值。
示例: max($1,$2,$3)
示例: max(list(1,2,3))
9.18.8. List和Map函数¶
9.18.8.1. 列表¶
描述:从输入参数创建列表
示例: list(1,2,3)
9.18.8.2. ListItem¶
描述:从列表中选择元素
示例: listItem(list('1','2','3'),0)
9.18.8.3. 映射值¶
描述:按键从地图实例中读取值
示例: mapValue($map,'key')
9.18.8.4. ParseList¶
描述:解析 List[T]
从字符串中键入。
如果您的SimpleFeatureType配置包含列表或映射,则可以轻松地配置转换函数以使用 parseList
接受2个或3个参数的函数
列表的原始类型(int、字符串、Double、Float、Boolean等)
对parse的引用
也可以选择列表分隔符(默认为逗号)
以下是一些CSV数据示例:
ID,Name,Age,LastSeen,Friends,Lat,Lon
23623,Harry,20,2015-05-06,"Will, Mark, Suzan",-100.236523,23
26236,Hermione,25,2015-06-07,"Edward, Bill, Harry",40.232,-53.2356
3233,Severus,30,2015-10-23,"Tom, Riddle, Voldemort",3,-62.23
例如,SFT可以指定一个字段:
{ name = "friends", type = "List[String]" }
以及用于解析引用的CSV字段的转换:
{ name = "friends", transform = "parseList('string', $5)" }
9.18.8.5. ParseMap¶
描述:解析 Map[T,V]
从字符串中键入。
解析映射与此类似。以带有引号的地图字段的CSV数据为例:
1,"1->a,2->b,3->c,4->d",2013-07-17,-90.368732,35.3155
2,"5->e,6->f,7->g,8->h",2013-07-17,-70.970585,42.36211
3,"9->i,10->j",2013-07-17,-97.599004,30.50901
我们的字段类型为:
numbers:Map[Integer,String]
然后我们指定一个转换:
{ name = "numbers", transform = "parseMap('int -> string', $2)" }
我们还可以选择为映射提供自定义列表/记录和键值分隔符:
{ name = "numbers", transform = "parseMap('int -> string', $2, '->', ',')" }
9.18.8.6. 转换列表项¶
描述:将转换表达式应用于列表的每个元素
示例: transformListItems(list('1','2','3'),'stringToDouble($0)')
要应用的表达式必须定义为字符串。在所示的示例中,列表将从 List[String]
至 List[Double]
。
9.18.9. 编码函数¶
9.18.9.1. Base64编码¶
描述:将字节数组编码为base-64 URL安全字符串。此函数也可以调用为 base64
,但该名称已被弃用,并将在未来版本中删除。
用途: base64Encode($0)
示例: base64Encode(stringToBytes('foo'))
9.18.9.2. Base64解码¶
描述:将base-64 URL安全的编码字符串解码为字节数组。
用途: base64Decode($0)
示例: base64Decode('Zm9v')
9.18.10. 国家职能¶
9.18.10.1. InputFilePath¶
描述:提供正在操作的文件的绝对路径(如果可用)
示例: $inputFilePath
文件路径是一个变量,通过引用 $
记数法。
根据转换器的调用方式,文件路径可能并不总是可用。当通过GeoMesa命令行工具或GeoMesa NiFi调用时,将对其进行适当设置。
9.18.10.2. 行号¶
描述:提供正在操作的文件中的当前行号(如果可用
示例: lineNo()
根据所使用的转换器,行号可能并不总是可用。对于某些转换器来说,行号可能是一个抽象的概念。例如,在Avro转换器中,行号将引用文件中Avro记录的编号。
9.18.11. 浓缩功能¶
9.18.11.1. 高速缓存查找¶
描述:从缓存中查找值
用途: cacheLookup(<cacheName>, <entityKey>, <attributeKey>)
示例: cacheLookup('test', $id, 'name')