如何使用R从多个表中提取列名

时间:2017-05-03 20:08:05

标签: r database

由于不熟悉Rstudio而提前抱歉......

这个问题分为两部分:

1)我有一个大型数据库,里面有近6,000个表。其中许多表中没有数据。是否有使用R的代码只提取包含数据的表名列表?

我知道如何使用下面的代码提取所有表名的列表以及如何提取特定的表数据。

test<-odbcDriverConnect('driver={SQL Server};server=(SERVER);database=(DB_Name);trusted_connection=true')
rest<-sqlQuery(test,'select*from information_schema.tables')
Table1<-sqlFetch(test, "PROPERTY")

以上是我用来访问数据库和表格的代码。

  • &#34;测试&#34;是连接
  • &#34;其余&#34;显示5,803个表名的列表..其中一个名为&#34; PROPERTY&#34;
  • &#34;表1&#34;只是拉出一个名为&#34; PROPERTY&#34;。
  • 的表

我希望做到&#34;休息&#34;仅显示包含数据的数据表。

2)我的最终目标,即第二个问题,是创建一个表格,显示该列表#1中的每个表的列表,然后列2,3,4等...将包括每个表中包含的每个列标题。知道怎么做?

非常感谢!

1 个答案:

答案 0 :(得分:0)

下面的Tables对象返回一个数据框,给出数据库中的所有表以及每个表中有多少行。作为一个条件,它要求所选的任何表至少有一个记录。这可能是获取非空表列表的最快方法。我提取查询以从https://stackoverflow.com/a/14163881/1017276

获取该信息

我对该查询的唯一保留是它没有给出模式名称,并且 可能在不同的模式中具有相同名称的表。因此,这可能只能在一个模式中一次运行良好。

library(RODBCext)

Tables <- 
  sqlExecute(
    channel = test,
    query = "SELECT T.name TableName, I.rows Records
             FROM sysobjects t, sysindexes i
             WHERE T.xtype = ? AND I.id = T.id AND I.indid IN (0,1) AND I.rows > 0
             ORDER BY TableName;",
    data = list(xtype = "U"),
    fetch = TRUE,
    stringsAsFactors = FALSE
  )

下一部分使用您在上面找到的表,然后从每个表中获取列信息。最后,它使用所有列名称生成单个数据框。

Columns <- 
  lapply(Tables$TableName,
         function(x) sqlColumns(test, x))
Columns <- do.call("rbind", Columns)

sqlColumnsRODBC中的一项功能。

sqlExecuteRODBCext中允许参数化查询的函数。我倾向于在需要在查询中使用带引号的字符串时使用它。