presto读取redis数据

目前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

发布了118 篇原创文章 · 获赞 37 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/woloqun/article/details/88538555