目前presto支持对redis中的string和hash类型数据,其他复杂结构暂时不支持,推荐使用hash
配置redis.properties,放置在$PRESTO_HOME/etc/catalog/
目录下
connector.name=redis
redis.nodes=localhost:6379
redis.hide-internal-columns=false
redis.table-description-dir=/Users/worker/soft/presto-server-0.215/etc/catalog/redis
redis.table-names=user_info
redis.default-schema=user_profile
redis.key-delimiter=:
redis.key-prefix-schema-table=true
redis.hide-internal-columns=false
配置key,value解析描述文件redis.json,放置在redis.table-description-dir指定的目录
{
"tableName": "user_info",
"schemaName": "user_profile",
"key": {
"dataFormat": "raw",
"fields": [
{
"name": "redis_key",
"type": "varchar",
"hidden": "false"
}
]
},
"value": {
"dataFormat": "hash",
"fields": [
{
"name": "name",
"type": "varchar",
"mapping": "name"
},{
"name": "age",
"type": "int",
"mapping": "age"
}
]
}
}
redis中插入数据
127.0.0.1:6379> hset user_profile:user_info:aaa name lucy
(integer) 1
127.0.0.1:6379> hset user_profile:user_info:aaa age 13
(integer) 1
127.0.0.1:6379> hset user_profile:user_info:bbb name leo
(integer) 1
127.0.0.1:6379> hset user_profile:user_info:bbb age 12
(integer) 1
presto 中查询
presto> select * from redis.user_profile.user_info;
redis_key | name | age | _key | _value | _value_corrupt | _value_length | _key_corrupt | _key_length
----------------------------+------+-----+----------------------------+--------+----------------+---------------+--------------+-------------
user_profile:user_info:bbb | leo | 12 | user_profile:user_info:bbb | NULL | false | 0 | false | 26
user_profile:user_info:aaa | lucy | 13 | user_profile:user_info:aaa | NULL | false | 0 | false | 26
(2 rows)
注:
1.redis的key设计时,最好设计成str1:str2:key这种类型数据,str1在presto应设成schema,str2会映射成tableName,presto解析时默认使用冒号分割rediskey,推荐使用默认设置;例如:user_profile:user_info:bbb,这样有个好处就是presto在执行查询操作的时候,只会扫描以str1:str2为前缀的数据;
2.value值必须保证为描述文件指定的类型,如上例子:“dataFormat”: “hash”,否则会报如下错误:
(error) WRONGTYPE Operation against a key holding the wrong kind of value