首页 > 其他分享 >NetCore 阿里云表格存储插入数据实例

NetCore 阿里云表格存储插入数据实例

时间:2024-10-11 16:51:15浏览次数:7  
标签:表格 NetCore attribute ColumnValue Add 实例 var new data

十年河东,十年河西,莫欺少年穷

学无止境,精益求精

帮助类:

public class OtsHelper
    {
        public static string Endpoint = "https://xxx.cn-shanghai.ots.aliyuncs.com";
        public static string InstanceName = "xxx";

        /// <summary>
        /// 获取阿里云ots客户端
        /// </summary>
        /// <returns></returns>
        public static OTSClient GetOTSClient()
        {
            var config = new OTSClientConfig(Endpoint, AliyunParm.AccessKey, AliyunParm.AccessSecret, InstanceName);

            // 禁止输出日志,默认是打开的。
            config.OTSDebugLogHandler = null;
            config.OTSErrorLogHandler = null;

            // 使用OTSClientConfig创建一个OtsClient对象。
            var otsClient = new OTSClient(config);
            return otsClient;
        }
        /// <summary>
        /// https://help.aliyun.com/zh/tablestore/developer-reference/updatetable-by-using-net-sdk?spm=a2c4g.11186623.0.0.5b01f732mxXX7K
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static CreateTableResponse CreateTable()
        {
            var otsClient = GetOTSClient();
            var primaryKeySchema = new PrimaryKeySchema();
            primaryKeySchema.Add("DeviceNo", ColumnValueType.String);
            primaryKeySchema.Add("CreateTime", ColumnValueType.Integer);

            //通过表名和主键列的schema创建一个tableMeta。
            var tableMeta = new TableMeta("chargerecord", primaryKeySchema);

            //设置预留读吞吐量为0,预留写吞吐量为0。
            var reservedThroughput = new CapacityUnit(0, 0);

            try
            {
                //构造CreateTableRequest对象。
                var request = new CreateTableRequest(tableMeta, reservedThroughput);
                //allowUpdate为false时,表示禁止UpdateRow相关更新写入操作。
                request.TableOptions.AllowUpdate = true;
                //数据生命周期至少为86400秒(一天)或-1(数据永不过期)。
                request.TableOptions.TimeToLive = -1; 
                //调用client的CreateTable接口,如果没有抛出异常,则说明执行成功。
                return otsClient.CreateTable(request);

                
            }
            //如果抛出异常,则说明失败,处理异常。
            catch (Exception ex)
            {
                Console.WriteLine("Create table failed, exception:{0}", ex.Message);
            }
            return null;

        }

        public static void InsertData(OtsModels data)
        {
            var otsClient = GetOTSClient();
            //定义行的主键,必须与创建表时的TableMeta中定义的一致。
            var primaryKey = new PrimaryKey();
            primaryKey.Add("DeviceNo", new ColumnValue(data.Deviceno));
            primaryKey.Add("CreateTime", new ColumnValue(TimeHelper.GetTimestamp(data.Createtime)));

            //定义要写入该行的属性列。
            var attribute = new AttributeColumns();
            attribute.Add("Rxsn", new ColumnValue(data.Rxsn));
            attribute.Add("Txsn", new ColumnValue(data.Txsn));
            attribute.Add("Chargetime", new ColumnValue(data.Chargetime));
            attribute.Add("Elecs", new ColumnValue(data.Elecs));
        

            try
            {
                //构造插入数据的请求对象,RowExistenceExpectation.IGNORE表示无论此行是否存在均会插入新数据。
                var request = new PutRowRequest("chargerecord", new Condition(RowExistenceExpectation.IGNORE),
                                        primaryKey, attribute);

                //调用PutRow接口插入数据。
                otsClient.PutRow(request);

                //如果没有抛出异常,则说明执行成功。
                Console.WriteLine("Put row succeeded.");
            }
            catch (Exception ex)
            {
                //如果抛出异常,则说明执行失败,处理异常。
                Console.WriteLine("Put row failed, exception:{0}", ex.Message);
            }
        }


        /// <summary>
        /// 批量写入数据
        /// </summary>
        /// <param name="lst"></param>
        public static void InsertDataBatch(List<OtsModels> lst)
        {
            var otsClient = GetOTSClient();
            var request = new BatchWriteRowRequest();
            var rowChanges = new RowChanges("chargerecord");
           foreach(var data in lst)
            {
                var primaryKey = new PrimaryKey();
                primaryKey.Add("DeviceNo", new ColumnValue(data.Deviceno));
                primaryKey.Add("CreateTime", new ColumnValue(TimeHelper.GetTimestamp(data.Createtime)));

                //定义要写入该行的属性列。
                UpdateOfAttribute attribute = new UpdateOfAttribute();
                attribute.AddAttributeColumnToPut("Rxsn", new ColumnValue(data.Rxsn));
                attribute.AddAttributeColumnToPut("Txsn", new ColumnValue(data.Txsn));
                attribute.AddAttributeColumnToPut("Chargetime", new ColumnValue(data.Chargetime));
                attribute.AddAttributeColumnToPut("Elecs", new ColumnValue(data.Elecs));

                rowChanges.AddUpdate(new Condition(RowExistenceExpectation.IGNORE), primaryKey, attribute);
            }

            request.Add("chargerecord", rowChanges);
            try
            {
                //调用BatchWriteRow接口写入数据。
                var response = otsClient.BatchWriteRow(request);
                var tableRows = response.TableRespones;
                var rows = tableRows["chargerecord"];

                //批量操作可能部分成功部分失败,需要检查每行的状态是否成功,详见示例代码的GitHub链接。
            }
            catch (Exception ex)
            {
                //如果抛出异常,则说明执行失败,处理异常。
                Console.WriteLine("Batch put row failed, exception:{0}", ex.Message);
            }
        }


        public static void DeleteOtsTable(string tableName)
        {
            var request = new DeleteTableRequest(tableName);
            try
            {
                GetOTSClient().DeleteTable(request); 
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete table failed, exception:{0}", ex.Message);
            }
        }
    }

单表插入不再说了,看下批量插入

注:批量插入最多一次只允许插入200条。

以下案例分批次插入9000条数据

   static void Main(string[] args)
        {
            //OtsHelper.CreateTable();
            List<OtsModels> lst = new List<OtsModels>();
            for(int i = 10; i < 100; i++)
            { 
                for (int j = 0; j < 100; j++)
                {
                    var obj = new OtsModels() { Chargetime = i, Deviceno = "C24000" + i, Elecs = i * j, Rxsn = "923000" + i, Txsn = "8525800" + i, Createtime = DateTime.Now.AddSeconds(i * j) };
                    lst.Add(obj);
                }
            }
            var Total = lst.Count;
            var PageSize = 200; 
            int pages = Total / PageSize;
            int pageCount = Total % PageSize == 0 ? pages : pages + 1;
            for(int i=1;i< pageCount+1; i++)
            {
                var lstresult = lst.Skip((i - 1) * PageSize).Take(PageSize).ToList(); 
                OtsHelper.InsertDataBatch(lstresult);
            }
            
          
            Console.ReadLine();
        }

@天才卧龙的波尔卡

标签:表格,NetCore,attribute,ColumnValue,Add,实例,var,new,data
From: https://www.cnblogs.com/chenwolong/p/18458828

相关文章

  • 教你如何免费获取股票数据用python、JavaScript (Node.js)、JAVA等多种语言的实例代码
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • 京东 API 接口获取商品详情数据示例表格输出
    由于实际的API调用需要API密钥和访问权限,而且这些通常不公开分享,我将提供一个假设性的框架和示例,说明如何从京东API获取商品详情数据,并将其整理成表格形式。如果你已经有了京东开放平台的API访问权限,你可以根据以下步骤和示例代码进行调整,以实际获取数据。步骤一:获取京东API......
  • crit: Microsoft.AspNetCore.Server.Kestrel[0] Unable to start Kestrel. Interop+Cr
    域名证书没有放在指定的位置错误信息crit:Microsoft.AspNetCore.Server.Kestrel[0]UnabletostartKestrel.Interop+Crypto+OpenSslCryptographicException:error:2006D080:BIOroutines:BIO_new_file:nosuchfileatInterop.Crypto.CheckValidOpenSslHandle(Saf......
  • CSS——表格、表单、链接和导航菜单
    一、设置表格样式CSS中有许多表格属性可以用来设置表格的样式,以下是一些常用的表格属性:border-collapse:设置表格的边框合并规则。可以设置为collapse来合并边框,或设置为separate来分隔边框(默认值为separate)。border:设置表格的边框样式、宽度和颜色。例如:border:1pxsoli......
  • JavaScript Number研究03_实例方法_toExponential_toFixed_toPrecision_toString_valu
    JavaScriptNumber研究03:实例方法——toExponential、toFixed、toPrecision、toString、valueOf、toLocaleString在JavaScript中,Number对象不仅包含了许多有用的静态属性,还提供了一系列实例方法,帮助我们在不同场景下处理和转换数值。这些方法包括:toExponential()toFixed()......
  • 手把手教你学PCIE(6.9)--驱动程序开发实例的网络设备驱动程序开发
    目录1.开发环境准备1.1安装开发工具1.2创建项目目录2.驱动程序代码2.1驱动程序头文件2.2驱动程序主文件3.编译驱动程序4.加载和卸载驱动程序5.测试驱动程序6.总结开发一个网络设备驱动程序是一个复杂的任务,涉及到网络协议栈的集成和硬件设备的管理。在......
  • .NetCore中下载文件接口指定文件名时中文被替换为下划线(_)的问题
      首先,我这里使用的.net6  比如我有这样一个接口:publicasyncTask<IActionResult>Download(stringname){//省略业务代码...returnFile(stream,"application/octet-stream",name);}  这里下载的文件名时接口参数传进来的,......
  • NetCore 使用 SimpleTCP 实现双工通信
    十年河东,十年河西,莫欺少你穷学无止境,精益求精1、新建netcore控制台应用程序并引入包 2、服务端usingSimpleTCP;usingSystem;usingSystem.Net;usingSystem.Text;namespaceTcpServe{classProgram{staticvoidMain(string[]args)......
  • JAVAWEB实现文件上传下载功能实例解析
    需求:大文件上传,批量上传,断点续传,文件夹上传,大文件下载,批量下载,断点下载,文件夹下载文件夹:上传下载需要支持层级结构,采用非压缩方式文件大小:100G前端:vue2,vue3,vue-cli,jquery,html,webuploader后端:JSP,springbootweb服务:tomcat数据库:mysql,oracle,达梦,国产化数据库服务......
  • css表格表单
    1.项目符号样式list-style-type无序列表:nonedisccirclesquare(无,黑点,圆圈,方格)有序列表:decimaldecimal-leading-zero,lower-alpha,upper-alpha,lower_roman,upper-roman<!DOCTYPEhtml><html> <head> <title>ListStyleType</title> <stylety......