对于minio 我们可以使用基于sql 的对象内容查询,特别适合进行特定文件内容的获取,强大方便。
以下是一个简单的试用

环境准备

集成了prometheus

  • docker-compose 文件
 
version: "3"
services:
    minio:
        image: minio/minio
        ports:
        - "9000:9000"
        command: server /data
        volumes: 
        - "./data:/data"
        environment: 
        - "MINIO_PROMETHEUS_AUTH_TYPE=public"
        - "MINIO_ACCESS_KEY=dalongapp"
        - "MINIO_SECRET_KEY=dalongapp"
    grafana:
        image: grafana/grafana
        ports:
            - "3000:3000"
    prometheus:
        image: prom/prometheus
        volumes:
            - "./prometheus.yml:/etc/prometheus/prometheus.yml"
        ports:
            - "9090:9090"
  • prometheus 配置
scrape_configs:
  - job_name: minio
    metrics_path: /minio/prometheus/metrics
    scrape_interval: 10s
    scrape_timeout: 10s
    static_configs:
      - targets: ['minio:9000']
  • select api 调用代码
    select.py2 文件

    使用python venv

import boto3
s3 = boto3.client('s3',
                  endpoint_url='http://localhost:9000',
                  aws_access_key_id='dalongapp',
                  aws_secret_access_key='dalongapp',
                  region_name='us-east-1')
r = s3.select_object_content(
    Bucket='demoapp',
    Key='demo.json',
    ExpressionType='SQL',
    Expression="SELECT d.dir_name, d.files FROM S3Object[*] d",
    InputSerialization={
        'CompressionType': 'NONE',
        'JSON': {
            'Type': 'DOCUMENT'
        }
    },
    OutputSerialization={'JSON': {}},
)
for event in r['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)
    elif 'Stats' in event:
        statsDetails = event['Stats']['Details']
        print("Stats details bytesScanned: ")
        print(statsDetails['BytesScanned'])
        print("Stats details bytesProcessed: ")
        print(statsDetails['BytesProcessed'])
  • 测试json 内容
    demo.json
 
{
    "created": "936864000",
    "dir_name": "important_docs",
    "files": [
        {
            "name": "."
        },
        {
            "name": ".."
        },
        {
            "name": ".aws"
        },
        {
            "name": "downloads"
        }
    ],
    "owner": "AWS S3"
}
  • minio s3 信息

运行&&效果

  • 启动环境
docker-compose up -d
  • 运行
python  select.py2 
  • 效果
python select.py2 
{"dir_name":"important_docs","files":[{"name":"."},{"name":".."},{"name":".aws"},{"name":"downloads"}]}
Stats details bytesScanned: 
300
Stats details bytesProcessed: 
300
  • prometheus 监控效果

说明

基于s3 的select api 我们可以方便的进行一些基于sql的数据分析操作

参考资料

https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/s3-glacier-select-sql-reference-select.html
https://docs.min.io/docs/minio-select-api-quickstart-guide.html
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html
https://github.com/rongfengliang/minio-s3-select-learning

minio select api 试用的更多相关文章

  1. 百度地图API试用--(初次尝试)

    2016-03-17: 百度地图API申请key的步骤相对简单,不做过多阐述. 初次使用百度地图API感觉有点神奇,有些功能加进来以后有点问题,注释掉等有空再解决. 代码如下: <%@ page ...

  2. sofa graphql 2 rest api 试用

      大部分代码还是来自sofa 的官方文档,同时添加了docker && docker-compose集成 备注: 代码使用typescript 同时运行的时候为了方便直接运行使用ts ...

  3. Minio Bucket 通知试用&&说明

    kafka 安装 docker run -p 2181:2181 -p 9092:9092 \ --name kafka --rm \ --env ADVERTISED_HOST=HOSTIP \ - ...

  4. Selenium - Switch & Select Api

    一.多表单切换  driver.switch_to.frame() iframe  :直接将一个html 页面嵌入另一个html 页面中 switch_to.frame() 默认可以直接取表单的id ...

  5. haproxy 2.0 dataplaneapi rest api 试用

    我们可以基于haproxy 提供的dataplaneapi 动态进行haproxy 配置的修改,增强haproxy的可编程能力,以下是一个简单 的测试,基于docker-compose运行 环境准备 ...

  6. 网络编程api bind函数细节 select 细节

    struct sockaddr_in bindaddr; bindaddr.sin_family = AF_INET; bindaddr.sin_addr.s_addr = htonl(INADDR_ ...

  7. Nonblocking I/O and select()

    This sample program illustrates a server application that uses nonblocking and the select() API. Soc ...

  8. linux select 与 阻塞( blocking ) 及非阻塞 (non blocking)实现io多路复用的示例

    除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnblogs.com/Anker/p/3265058.html 最简单的select示例: #incl ...

  9. 【ASP.NET Web API教程】2.3.6 创建产品和订单控制器

    原文:[ASP.NET Web API教程]2.3.6 创建产品和订单控制器 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. Part 6 ...

随机推荐

  1. Paper | A novel deep learning-based method of improving coding efficiency from the decoder-end for HEVC

    目录 精彩叙述 细节 发表在2017年DCC. 这篇文章立意很简单,方法也很简单,但是做得早.效果好.引用量也不错(40+). 指标:在HEVC的intra.LDP.LDB和RA模式下,BDBR平均可 ...

  2. Python Dataframe 分组排序和 Modin

    Python Dataframe 分组排序和 Modin 1.按照其中一列进行排序 在dataframe中,按照其中的一列排序:比如q值倒排 (1)rank方法 data['new_rank'] = ...

  3. select使用css居右对齐

    select{ direction: rtl; } 下面的方法无效 select{ text-align: right; }

  4. webrtc笔记(5): 基于kurento media server的多人视频聊天示例

    这是kurento tutorial中的一个例子(groupCall),用于多人音视频通话,效果如下: 登录界面: 聊天界面: 运行方法: 1.本地用docker把kurento server跑起来 ...

  5. CAS单点登录之支持数据库认证

    本博客介绍一下基于CAS4.2.7的配置,之前博客CAS4.2.7服务端配置已经介绍了怎么部署CAS服务端,不过在登录机制是用固定的账号密码登录,实际项目肯定不可以这样做,所以本博客怎么配置CAS服务 ...

  6. nginx 日志配置log_format用法

    nginx服务器日志相关指令主要有两条: 1.一条是log_format,用来设置日志格式: 2.另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_ ...

  7. MS14-068域提权漏洞复现

    MS14-068域提权漏洞复现 一.漏洞说明 改漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限. 微软官方解释: https://docs.microsoft.com/zh-cn ...

  8. js变量--全局变量和局部变量

    1.javaScript中在函数里声明的变量为局部变量,其余为全局变量. 2.javaScript没有块级元素

  9. 练手WPF(二)——2048游戏的简易实现(下)

    接着上一篇继续~~~ 6.动画显示增加分数 /// <summary> /// 动画显示增加得分 /// </summary> /// <param name=" ...

  10. Oracle查询日期字段是否包含时分秒 TRUNC() 函数

    可以使用 ORACLE TRUNC()函数 来进行判断 表 A 日期字段 datetime 部分数据带时分秒,部分数据没有时分秒 select * from A where datetime = TR ...