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 功能。 secsToDatemillisToDate 可用于解析自Java时代以来的间隔。有关每个功能的完整说明,请参阅下面的内容。

功能

格式

示例

基本等同日期

yyyyMMdd

20150101

等轴测日期

yyyy-MM-dd

2015-01-01

等位置日期

yyyy-MM-dd

2015-01-01

基本日期时间无千位数

yyyyMMdd'T'HHmmssZ

20150101 T000000Z

基本日期时间

yyyyMMdd'T'HHmmss.SSSZ

20150101T000000.000Z

等同日期时间

yyyy-MM-dd'T'HH:mm:ss

2015-01-01:00:00

等位置日期时间

yyyy-MM-dd'T'HH:mm:ss

2015-01-01:00:00

等偏移日期时间

yyyy-MM-dd'T'HH:mm:ssZ

2015-01-01 T00:00:00Z

日期小时分钟秒数

yyyy-MM-dd'T'HH:mm:ss.SSS

2015年01月01T00:00:00.000

日期时间

yyyy-MM-dd'T'HH:mm:ss.SSSZ

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个参数的函数

  1. 列表的原始类型(int、字符串、Double、Float、Boolean等)

  2. 对parse的引用

  3. 也可以选择列表分隔符(默认为逗号)

以下是一些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')