介绍

通过select-object实现类sql语法查询文件

预备上传文件

**上传文件**
image.pngimage.png

调用测试

python_select

  1. import os
  2. import oss2
  3. from itertools import islice
  4. # 首先初始化AccessKeyId、AccessKeySecret、Endpoint等信息。
  5. # 通过环境变量获取,或者把诸如“<yourAccessKeyId>”替换成真实的AccessKeyId等。
  6. #
  7. # 以杭州区域为例,Endpoint可以是:
  8. # http://oss-cn-hangzhou.aliyuncs.com
  9. # https://oss-cn-hangzhou.aliyuncs.com
  10. access_key_id = os.getenv('OSS_TEST_ACCESS_KEY_ID', '<yourAccessKeyId>')
  11. access_key_secret = os.getenv('OSS_TEST_ACCESS_KEY_SECRET', '<yourAccessKeySecret>')
  12. bucket_name = os.getenv('OSS_TEST_BUCKET', '<yourBucket>')
  13. endpoint = os.getenv('OSS_TEST_ENDPOINT', '<yourEndpoint>')
  14. # 创建存储空间实例,所有文件相关的方法都需要通过存储空间实例来调用。
  15. bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint, bucket_name)
  16. ### CSV示例
  17. key = 'python_select.csv'
  18. # 文件内容
  19. content = 'fralychen,love,china'*10
  20. filename = 'python_select.csv'
  21. # 上传一个文件名为python_select.csv文件
  22. bucket.put_object(key, content)
  23. #遍历文件上传后的文件目录
  24. for b in islice(oss2.ObjectIterator(bucket),10):
  25. print(b.key)
  26. # 通过select_object使用sql语法查询文件
  27. #def select_object(self, key, sql,
  28. # progress_callback=None,
  29. # select_params=None,
  30. # byte_range=None
  31. # )
  32. result = bucket.select_object(key, 'select * from ossobject')
  33. print(result.read())
  34. ### JSON示例
  35. key = 'python_select.json'
  36. #content = "{contacts:
  37. # [
  38. # {
  39. # "key1":1,
  40. # "key2":"love china"
  41. # },
  42. # {
  43. # "key1":2,
  44. # "key2":"fralychen"
  45. # }
  46. # ]
  47. # }"
  48. content = "{\"contacts\":[{\"key1\":1,\"key2\":\"love china\"},{\"key1\":2,\"key2\":\"fralychen\"}]}"
  49. # 上传一个文件名为python_select.json文件
  50. bucket.put_object(key,content)
  51. result = bucket.select_object(key,'select * from ossobject')
  52. print(result.read())

输出

oss控制台查看上传后的文件
image.png
csv示例输出
image.png
json示例输出
image.png

常见sql

应用场景 SQL语句
返回前10行数据 select * from ossobject limit 10
返回第1列和第3列的整数,并且第1列大于第3列 select _1, _3 from ossobject where cast(_1 as int) > cast(_3 as int)
返回第1列以’陈’开头的记录的个数(注:此处like后的中文需要用UTF-8编码) select count(*) from ossobject where _1 like ‘陈%’
返回所有第2列时间大于2018-08-09 11:30:25且第3列大于200的记录 select * from ossobject where _2 > cast(‘2018-08-09 11:30:25’ as timestamp) and _3 > 200
返回第2列浮点数的平均值,总和,最大值,最小值 select AVG(cast(_2 as double)), SUM(cast(_2 as double)), MAX(cast(_2 as double)), MIN(cast(_2 as double))
返回第1列和第3列连接的字符串中以’Tom’为开头以’Anderson‘结尾的所有记录 select * from ossobject where (_1 || _3) like ‘Tom%Anderson’
返回第1列能被3整除的所有记录 select * from ossobject where (_1 % 3) == 0
返回第1列大小在1995到2012之间的所有记录 select * from ossobject where _1 between 1995 and 2012
返回第5列值为N,M,G,L的所有记录 select * from ossobject where _5 in (‘N’, ‘M’, ‘G’, ‘L’)
返回第2列乘以第3列比第5列大100以上的所有记录 select from ossobject where _2 _3 > _5 + 100

参考文档

有关更多分片查询,sql语法可参考连接文档链接
更多场景用途SelectObject官网介绍

640X60.jpg