使用 cdata ado.net 数据提供程序在 Google BigQuery 中插入 Json

Posted

技术标签:

【中文标题】使用 cdata ado.net 数据提供程序在 Google BigQuery 中插入 Json【英文标题】:Json Insert in Google BigQuery using cdata ado.net data providers 【发布时间】:2016-01-13 12:10:44 【问题描述】:

我正在用 c# 开发一个控制台应用程序,将一组记录插入到 Google BigQuery 表中。对于插入和选择数据,使用 cdata ado.net 数据提供程序。用for循环插入数据时,会插入数据,但当数据范围超过10万行时,插入时间会很长。

所以我决定插入一个包含json格式数据行的json文件,而不是执行一组字符串查询。

但我不知道如何做以及从哪里开始?有没有其他方法可以在 C#-->BigQuery 中实现相同的功能?

 private static DataTable GetDataTableTest(string Query)
        
            DataTable dt = null;
            SqlDm SqlDM = new SqlDm(ConfigurationManager.ConnectionStrings["SQLData"].ToString());
            SqlDM.StoredProcedureName = Query;
            dt = SqlDM.ExecuteDataTable();
            SqlDM = null;
            return dt;
        
        private static void ADDToBigQueryTest()
        
            string FileToInsert = "select Top 10 * from SalesTable";
            string InsertQuery = string.Empty;
            DataTable dt = GetDataTable(FileToInsert);
            if (dt != null && dt.Rows.Count > 0)
            
                StringBuilder sbQuery = new StringBuilder();

                for (int i = 0; i < dt.Rows.Count; i++)
                

                    sbQuery.AppendLine(dt.Rows[i][1].ToString());
                

                InsertQuery = sbQuery.ToString();
            


            using (GoogleBigQueryConnection BigCon = new GoogleBigQueryConnection(ConfigurationManager.ConnectionStrings["BigQuery"].ToString()))
            

                GoogleBigQueryCommand BigCmd = new GoogleBigQueryCommand(InsertQuery, BigCon);
                BigCmd.ExecuteNonQuery();


            
            Console.WriteLine("\n Inserted To BigQuery");
        

【问题讨论】:

【参考方案1】:

适用于 Google BigQuery 的 CData ADO.NET 提供程序支持 INSERT INTO SELECT 语句,您可以使用该语句通过单个请求批量插入数据。

您可以通过将行插入到本地临时表中来执行此操作,然后进行 INSERT INTO SELECT 调用:

INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested', '9000');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 2', '9001');
INSERT INTO publicdata:samples.github_nested#TEMP (repository.name, MyCustomField__c) VALUES ('New publicdata:samples.github_nested 3', '9002');

然后执行:

INSERT INTO publicdata:samples.github_nested (repository.name, MyCustomField__c) SELECT repository.name, MyCustomField__c FROM publicdata:samples.github_nested#TEMP

参考:http://cdn.cdata.com/help/DBA/ado/pg_insertselect.htm

【讨论】:

以上是关于使用 cdata ado.net 数据提供程序在 Google BigQuery 中插入 Json的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MS Access 作为 ADO.NET 实体框架的提供者?

Ado.NET SqlDataReader详解

ADO.net是啥?通过ADO. NET连接到数据库,提取数据,一般需要哪对象?

MySQL 的非 GPL ADO.NET 提供程序?

讲义17:ADO.NET数据库技术

实体框架寻找 ADO.NET 提供程序 SqlServerCe.3.5 而不是 4.0