Источники данных odbc excel

With ODBC, you can summarise, and select just the data you need, in an Excel workbook before importing it into SQL Server. You can join data from different areas or worksheets. You can even get data from the result of a SQL Server SELECT statement into an Excel spreadsheet. Phil Factor shows how, and warns of some of the pitfalls.

Why Use ODBC?

It is reasonably easy to insert data from Excel into SQL Server, or the reverse, from any other ODBC database to any other, using PowerShell. The most important direction is from Excel to SQL Server, of course. It is quicker than automating Excel and you can do it without requiring a copy of Excel. It is neater than SSIS too, and more versatile. The most important thing, though, is that you can aggregate before you send the data. It is possible to do a lot of filtering and aggregation of data before it ever gets to SQL Server, since you can turn an existing Excel Workbook into a poor-man’s relational database, or even create one. This article will aim to show how this is done.

I always feel slightly awkward in talking about ODBC. It is a Once and Future technology, developed before its time, but now showing its value for processing large volumes of data, despite its quirks, poor documentation and lackluster support. If you use the ODBC driver, then your Excel workbook becomes a little SQL-based relational database. Worksheets, or areas within worksheets, become tables. There are some features missing, of course, but you can do joins between tables, filter rows to taste,  do aggregations and some string manipulations.  This means that you need pull far less data into SQL because you can do a lot of selection and pre-processing before the data gets anywhere near SQL server. If, for example, you only need the total, count, and variance of a day’s readings, then why on earth would you want to import more than those aggregated figures?  Even if you do, these aggregations, performed on the original data, can be used as a ‘reconciliation’ check that you’ve gulped all the data into their final destination without error.

 I also prefer to use ODBC and the sequential data reader to read data from Excel, or any other ODBC source, because it is fast; and I like to use the bulk copy library to insert  ODBC ‘reader’ data into a SQL Server table because it is extremely fast, so we’ll use that. When you have a large number of big spreadsheets to insert as a chore, then speed matters.

The ODBC Excel driver (ACE)

ODBC was conceived as a way of making it as easy to connect to a particular datasource such a relational database, text file, data document (e.g. XML), web-based data or spreadsheet

Currently, the state of the art in ODBC for Access and Excel is the Microsoft Access Database Engine 2010 Redistributable which can be downloaded here. This includes the more popular OLEDB drivers which run well in PowerShell too.  These drivers enable you to access a range of data files via SQL as if they were a relational database.  Formats include Access, CSV,  delimited, DBase and Excel 

For developing on a general-purpose 64-bit desktop computer, you’re likely to hit a very silly Microsoft muddle. Microsoft  recommends that you install the 32-bit version of Office 2010, even on 64-bit machines,  since many of the common Office Add-ins did not run in the 64-bit Office environment. This advice has become baked-in ‘best practice’.  If you are using 64-bit PowerShell, as most of us are, then you need to use the 64-bit version of the drivers. If you  only have the 32-bit Office on your machine, then it will already have the 32-bit drivers, which won’t be visible to 64-bit PowerShell, and won’t work.  You can’t install the 64 bit drivers when you already have the 32-bit drivers and I don’t think you can get anything good to happen by uninstalling the 32-bit drivers. Nope. All three (or four if you include Visual Studio) must be 64 bit. I gather that one way out of this Catch 22 is  to first install the 64-bit Office 2010 ODBC/OleDB drivers and after that the (32-bit) Office, but there is a better fix that involves tweaking the registry.  See this for the full frustrating story.

The ODBC Excel driver in ACE works with the latest Excel spreadsheet format up to 2010 as well as the old ones. I suspect that the latest version will work with Office 2013, though I haven’t yet tried it.

This driver  is valuable because of the flexibility it gives. It actually executes ODBC SQL, which is a subset of SQL92,  so you can put in column aliases, change the column order,  and filter out rows that you don’t want to import. In effect, it presents you with a SQL tables which can be named ranges, if it is an existing worksheet that you’ve added named ranges to.

Select * from MyNamedRange

More commonly, you can specify with a delimited worksheet name followed by a range, the range being a specification of the area of the worksheet just sufficient to enable the driver to find the data you want. If you leave out the range spec entirely, the entire worksheet becomes the table.

Select * from [MyWorksheet$]

If, for example, you wanted the data in the range from C3 to L8, you’d use the statement

Select * from [MyWorksheet$C3:M8]

In ODBC, if you specified, say,  row 8 as the end of the table, you can only select rows up to row 8, even if you have inserted more rows beyond that limit, as ODBC allows. If you use some flavours, such as  the old  MDAC ‘JET’ database engine,  then you cannot add new rows beyond the defined limits of a range, otherwise you will get the Exception: "Cannot expand named range" message

If you wanted to define your table as being between the columns C and L, starting at row 3 you’d use

Select * from [NameOfExcelSheet$C3:M]

If you do this, then there is no limit to the length of the table so you can insert as many rows as you like.  The ODBC provider adds new rows to the existing rows in the defined area as space allows

The dreaded connection string

Now, before we start doing interesting things with the ACE drivers, I ought to explain a bit about their connection strings. These contain the specification of the ODBC driver you wish to use, and the settings that you wish to transmit to the driver.

Ignoring, for the time being, the extended property settings, For Microsoft Office Access data, set the Connection String to

«Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= MyPath/MyFile«

For Excel data, use

«Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=MyPath/MyFile«

For dBASE data, use

«Driver={Microsoft Access dBASE Driver {*.dbf, *.ndx, *.mdx)};DBQ=MyPath/MyFile«

For text data, use

«Driver={Microsoft Access Text Driver {*.txt, *.csv);DBQ=MyPath«

But you’re likely to want some extended properties for the settings to add a few details about the way that the ODBC provider should tackle this particular connection. Because the defaults can be changed globally in the registry, it is rather better to specify these extended properties rather than to rely on the defaults.

These extended properties are only relevant for the driver that you’re using. They are not always reliable and are poorly documented by Microsoft. I’ll only mention the essentials.

The driver needs to know if the first row of the table holds the name of the column. “HDR=Yes;” indicates that the first row contains column names, not data. It will actually just use the first 64 characters of the header.   “HDR=No;” treats the first row as data, but then the columns are named F1  onwards and you’d want to  alias them in your SQL statements to give them meaningful column names.

The Excel ODBC doesn’t keep a detailed schema definition of the tables. (the Text and Access  drivers by contrast do)  The ODBC Excel  driver will try to make sense of the data it finds by testing it to see what datatype it can use for the result. It does so by testing a number of rows before doing the import, and you can specify how many rows it tests before deciding the data type of the column by using MaxScanRows in the extended properties.  By default the value of this is 8. You can specify any value from 1 – 16 for 1 to 16 rows. You can also make the value to 0 so that it searches all existing rows before deciding the data type, but this slows things down.

This is fine for a relational table but Excel often has mixed types in a column The ODBC Provider will try to return the data of the majority type, but return NULL values for the rest that won’t convert. If the two types are equally mixed in the column, the provider chooses numeric over text, and you lose all the text. Also, it will judge the length of the character datatype in the column from the first rows and if the first rows are less than 255 characters long it will truncate all the subsequent data to 255 characters even if cell values below are longer.

By setting the Import Mode (IMEX=1). You can force mixed data to be converted to text, but only when it finds mixed values on the rows that it checks.

You can also open the Excel workbook in read-only mode by specifying ReadOnly=true; By Default Readonly attribute is false, so you can modify data within your workbook. However, this will lock the entire workbook from access until you close the connection.

Let’s try it out.

Just so you can prove all this to yourself, I’ve supplied an Excel workbook that represents the old PUBS database that used to be distributed with SQL Server and Sybase. This means that you can use SQL from old examples that use PUBS and see what works. All you need to do is to convert the SQL Server version slightly by altering the names of the tables slightly to tell the driver that you want the entire worksheet of that name (the $ is the separator between the worksheet name and the range specification)

So let’s pop together a very simple test-rig to try things out in PowerShell. Be warned, I’ve set this up in read-write mode so it will update your spreadsheet in some circumstances (CUD). To play along, you’ll need to download my Excel version of the PUBS database and  alter the path to the excel file.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

set-psdebug -strict

$ErrorActionPreference = «stop»

$ExcelFilePath=‘MyPathpubs.xlsx’ #the full path of the excel workbook

if (!(Test-Path $ExcelFilePath))

{

Write-Error «Can’t find ‘$($ExcelFilePath)’. Sorry, can’t proceed because of this»

exit

}

try {

$Connection = New-Object system.data.odbc.odbcconnection

$Connection.ConnectionString = ‘Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=’+$ExcelFilePath+‘; Extended Properties=»Mode=ReadWrite;ReadOnly=false; HDR=YES»‘

$Connection.Open()

}

catch

{

$ex = $_.Exception

Write-Error «whilst opening connection to $ExcelFilePath : Sorry, can’t proceed because of this»

exit

}

try {

$Query = New-Object system.data.odbc.odbccommand

$Query.Connection = $connection

$Query.CommandText = @’

SELECT title, SUM(qty) AS sales,

COUNT(*) AS orders

FROM [titles$] t

INNER JOIN [sales$] s ON t.title_id=s.title_id

WHERE title like ‘%?’

GROUP BY title

ORDER BY SUM(qty) DESC

‘@

$Reader = $Query.ExecuteReader([System.Data.CommandBehavior]::SequentialAccess) #get the datareader and just get the result in one gulp

}

catch

{

$ex = $_.Exception

Write-Error «whilst executing the query ‘$($Query.CommandText)’ $ex.Message Sorry, but we can’t proceed because of this!»

$Reader.Close()

$Connection.Close()

Exit;

}

Try

{

$Counter = $Reader.FieldCount #get it just once

$result=@() #initialise the empty array of rows

while ($Reader.Read()) {

$Tuple = New-Object -TypeName ‘System.Management.Automation.PSObject’

foreach ($i in (0..($Counter 1))) {

Add-Member `

-InputObject $Tuple `

-MemberType NoteProperty `

-Name $Reader.GetName($i) `

-Value $Reader.GetValue($i).ToString()

}

$Result+=$Tuple

}

$result | Format-Table

}

catch

{

$ex = $_.Exceptio

Write-Error «whilst reading the data from the datatable. $ex.Message»

}

$Reader.Close()

$Connection.Close()

All these work

Inner joins

SELECT logo, pr_info, pub_name, city, state, country

FROM [pub_info$] pif INNER JOIN [publishers$] p

ON p.pub_id=pif.pub_id

Left or right outer joins

SELECT  title, stor_id, ord_num, qty,ord_date

FROM [titles$] t LEFT OUTER JOIN  [sales$] s

ON t.title_id=s.title_id

Expressions using columns

SELECT  fname+‘ ‘+ minit+‘ ‘+lname AS name, job_desc

FROM [jobs$] d

INNER JOIN  [employee$] e

ON d.job_id=e.job_id

Simple GROUP BY expression

SELECT COUNT(*) FROM [sales$] GROUP BY stor_ID

More complex aggregation with ORDER BY clause and a WHERE clause

SELECT  title, SUM(qty) AS sales,

COUNT(*) AS orders

FROM [titles$] t

INNER JOIN  [sales$] s ON t.title_id=s.title_id

WHERE title like ‘%?’

GROUP BY title

ORDER BY SUM(qty) DESC

String functions

SELECT  title, left(notes,20)+‘…’ as [note] FROM [titles$]

UNION and UNION ALL

SELECT  au_fname FROM [authors$] UNION ALL SELECT lname FROM [employee$]

One could go on and on; even subqueries work, but I think I’ve made the point that there is far more power in this ODBC Excel driver than just the facility for pulling out raw data. The same is true of the TEXT driver for OLEDB. It will do all this as well. To conform with the minimum syntax for ODBC, a driver must be able to execute CREATE TABLE, DELETE FROM (searched), DROP TABLE, INSERT INTO, SELECT, SELECT DISTINCT, and UPDATE (searched). SELECT statements can have WHERE and ORDER BY clauses. ACE does a bit better than this, since even the text driver allows SELECT INTO, and SELECT statements allow GROUP BY and HAVING. 

Creating a spreadsheet

You can, of course use the ODBC driver to create an Excel spreadsheet and write data into it. Here is the simplest working demo I can write without blushing. Be careful to ensure that the spreadsheet doesn’t exist as the whole point of the demo is to prove to you that it can create an entire spreadsheet workbook with several worksheets.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

$ExcelFilePath=‘MyPathNew.xlsx’ #the full path of the excel workbook

$Header= $true # we want your first row to be column headers

try {

$Connection = New-Object system.data.odbc.odbcconnection

$TheConnectionString = ‘Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=’+$ExcelFilePath+‘;Mode=ReadWrite;ReadOnly=false;Extended Properties=»HDR=’+«$(if ($Header){‘YES’}else{‘NO’})»+‘»‘

$Connection.ConnectionString=$TheConnectionString

$Connection.Open()

}

catch

{

$ex = $_.Exception

Write-Error «whilst opening connection to $ExcelFilePath using ‘$($TheConnectionString)’ : $ex.Message»

}

$Mycommand=$connection.CreateCommand()

$MyCommand.CommandText=«create table MyTable (MyColumn varchar, MyOtherColumn varchar)»

if ($Mycommand.ExecuteNonQuery() -eq -1)

{

$MyCommand.CommandText=«insert into MyTable (MyColumn, MyOtherColumn) select ‘myfirstRowCol’,’myFirstRowCol2′»

$rows=$Mycommand.ExecuteNonQuery()

«$rows rows inserted into worksheet MyTable»

}

$connection.Close()

Notice that I can’t create the table and do the insert in one batch as a command. One statement only can be used in the commandText.

Exploring your Excel metadata

You can find out what datatypes are available for any ODBC source, by using the OdbcConnection.GetSchema(string) method.

$Datatypes=$connection.GetSchema(‘DATATYPES’).TypeName

Which with my connection gives only the LOGICAL, CURRENCY, NUMBER, VARCHAR and DATETIME datatypes. More useful is..

$tables=$connection.GetSchema(‘TABLES’).Table_Name

 … that gives you a list of the available worksheets . The complete list, if you wish to peep at them, is

$connection.GetSchema(‘TABLES’)

$connection.GetSchema(‘DATATYPES’)

$connection.GetSchema(‘DataSourceInformation’)

$connection.GetSchema(‘Restrictions’)

$connection.GetSchema(‘ReservedWords’)

$connection.GetSchema(‘Columns’)

$connection.GetSchema(‘Indexes’)

$connection.GetSchema(‘Views’)

Hmm. This is beginning to look a bit more like a database. With the Columns MetadataCollection, you can find out as much as you’d ever want to know about the data that is available in the spreadsheet so if you want to read all the worksheets straight into SQL Server, this is a wide-open goal.

Creating Worksheets

Going back to the PUBS Excel database, let’s create a peoples table and populate it with both authors and salespeople. This has to be done in three gulps since the driver seems to dislike the idea of doing a batch, and it kicks when I try to UNION the two results.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

$ExcelFilePath=‘C:UsersAdministratorDocumentsPOSHScriptsPubs.xlsx’ #the full path of the excel workbook

$Header= $true # true if you want your first row to be read as column headers

if (!(Test-Path $ExcelFilePath))

{

Write-Error «Can’t find ‘$($ExcelFilePath)’.  Sorry, can’t proceed because of this»

exit

}

try {

$Connection = New-Object system.data.odbc.odbcconnection

$TheConnectionString = ‘Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=’+$ExcelFilePath+‘;Mode=ReadWrite;ReadOnly=false;Extended Properties=»HDR=’+«$(if ($Header){‘YES’}else{‘NO’})»+‘»‘

$Connection.ConnectionString=$TheConnectionString

$Connection.Open()

}

catch

{

$ex = $_.Exception

Write-Error «whilst opening connection to  $ExcelFilePath using ‘$($TheConnectionString)’ : $ex.Message»

}

$Mycommand=$connection.CreateCommand()

$MyCommand.CommandText=

  CREATE TABLE people

    (Person varchar)

«@

if ($Mycommand.ExecuteNonQuery() -eq -1)

{$MyCommand.CommandText=

    INSERT into [people$](person)

       SELECT lname FROM [employee$]

«@

$rows=$Mycommand.ExecuteNonQuery()

$MyCommand.CommandText=

    INSERT into [people$](person)

       SELECT  au_fname FROM [authors$]

«@

$rows=$rows+$Mycommand.ExecuteNonQuery()

}

«$rows rows inserted into table»

$connection.Close()

You’ll find you can UPDATE, INSERT and DELETE data perfectly happily this way.  If you connect up a spreadsheet to a SQL Server database, then you can have a lot of fun copying entire databases into spreadsheets, and back again. Robyn and I show how to do this here.

The problem is in the Workbook you create. Whether you name it XLS or XSLX it produces an XLSX spreadsheet, in the latest zipped Office Open XML form.  The trouble is that, with my version of the driver,  I can only get  Excel to read it with the XLS filetype, since it says that there is an error if you try to open it as an .XLSX file. I suspect that the ODBC driver hasn’t been that well tested by Microsoft.

Getting data into SQL Server from Excel using PowerShell

Now, what about using PowerShell to copy the data, maybe filtered, sorted and aggregated, into SQL Server, using PowerShell and ODBC. In this direction we can save a lot of time by using the BCP library. We’ll now describe the routine.

We’ll keep this unpacked, as a script rather than a function, since this is designed to illustrate the process.

We’ll start by defining our credentials, preferences, sources and destinations. We’ll read in the data from and excel spreadsheet and then spit it out into SQL Server, creating a table if necessary. To create the destination table (some of these spreadsheets are rather wide and therefore easier to import automatically), we’ll need to examine the metadata, and to interpret this to the SQL Server equivalent, so we’ll do that. To use the BCP library, it is good to have an indication of progress so I’ll show how you do that.

I’ve provided the sample data so that you don’t have to scramble around to find something suitable. This is some climate data, which is handy for checking things like date conversion.

You will notice that although you can render numbers in a variety of ways, there is only one way of storing numbers in Excel, in the ‘NUMBER‘ datatype (the other datatypes in Excel are LOGICAL, CURRENCY, VARCHAR and DATETIME).  I’ve therefore had to specify the precision of numeric data, which is tough if you have some columns with integers and others with real decimal data with numbers after the decimal point (scale). Remember that this routine is just creating a staging table, not the final destination. All you need to do is to add your own statements to transfer the data to their final table with the CAST to the correct internal data type!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

set-psdebug -strict

$ErrorActionPreference = «stop»

$ExcelFilePath = ‘MyPathCambridgeWeatherData.xlsx’ #the full path of the excel workbook

$Worksheet = ‘cambridgedata’ #this is the actual worksheet where the data is

$DataRange = » #e.g. ‘A2:M33’  this is the range of the cells that make up the table. leave blank to read the whole worksheet

# leave out the second row number to read all rows from the column range

$Header = $true # true if you want your first row to be read as column headers

# If you aren’t reading columns they are labelled F1..n. You can easily specify them

#$ColumnNames=»’2011» as year,[F1] as Day’

$ColumnNames = ‘*’

#If you dont have fieldnames in the header of your worksheet, you can specify $Header= $false and use F1..Fn instead.

$DestinationTable = ‘CambridgeClimateData’ #the name of the SQL Server table where you want to put the data

$Destinationinstance = ‘MyInstance’ #the name of the server or instance

$Destinationdatabase = ‘MyDataBase’ #the name of the datatabase where you want to put the data

$DestinationWindowsSecurity = $true #or $False if you aren’t using Windows security

$DestinationUserID = » #the name of the SQL Server user if not integrated security

$DeleteContentsOfTableBeforeCopy = $false

$PrecisionForNumericData = 1

if (!(Test-Path $ExcelFilePath))

{

    Write-Error «Can’t find ‘$($ExcelFilePath)’.  Sorry, can’t proceed because of this»

    exit

}

try

{

    $Connection = New-Object system.data.odbc.odbcconnection

    $TheConnectionString = ‘Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=’ + $ExcelFilePath + ‘; Extended Properties=»READONLY=TRUE; HDR=’ + «$(if ($Header) { ‘YES’ }

        else { ‘NO’ })» + ‘»‘

    $Connection.ConnectionString = $TheConnectionString

    $Connection.Open()

}

catch

{

    $ex = $_.Exception

    Write-Error «whilst opening connection to  $ExcelFilePath using ‘$($TheConnectionString)’ :  $($ex.Message). Sorry, can’t proceed because of this»

    exit

}

# get the types via $Connection.GetSchema(‘DataTypes’)|select TypeName, DataType,SQLType

try

{

    $Query = New-Object system.data.odbc.odbccommand

    $Query.Connection = $connection

    $Query.CommandText = ‘Select’ + $columnNames + ‘ from [‘ + $Worksheet + ‘$’ + $DataRange + ‘]’

    $Reader = $Query.ExecuteReader([System.Data.CommandBehavior]::SequentialAccess) #get the datareader and just get the result in one gulp

}

catch

{

    $ex = $_.Exception

    Write-Error «whilst making the query ‘$($Query.CommandText)’ $ex.Message Sorry, but we can’t proceed because of this!»

    Exit;

}

$columns = $reader.GetSchemaTable() | select columnName, datatype

if ($DeleteContentsOfTableBeforeCopy) { $deletionScript = «ELSE DELETE from $DestinationTable « }

else { $deletionScript = » }

$CreateScript =

IF NOT EXISTS

(select TABLE_NAME from information_schema.tables

    where TABLE_NAME like ‘$DestinationTable’)

CREATE TABLE $DestinationTable (

«@

$CreateScript += $columns | foreach-object{ $datatype = «$($_.dataType)»; «`n`t[$($_.columnName.Trim())]  $(switch ($dataType) { ‘double'{ «numeric(18,$PrecisionForNumericData)» } ‘boolean'{ ‘int’ } ‘decimal'{ ‘Money’ } ‘datetime'{ ‘DateTime’ }

            default { ‘NVARCHAR(MAX)’ } }),» }

$CreateScript = $CreateScript.Substring(0, $CreateScript.Length 1) + «`n`t)`n $deletionScript»

$DestinationConnectionString = «Data Source=$Destinationinstance;Initial Catalog=$Destinationdatabase;$(

    if ($DestinationWindowsSecurity) { ‘integrated security=true’ }

    else { ‘User Id=’ + $DestinationUserID + ‘;Password=’ + «$(((Get-Credential $DestinationUserID).GetNetworkCredential()).Password)» + ‘;integrated security=false’ }

try

{

    #test to see if the table is there. If it isn’t, then create it. If it is, then delete the contents

    $SqlCommand = new-object (‘Data.SqlClient.SqlCommand’) $CreateScript, $DestinationConnectionString;

    $SqlCommand.Connection.Open();

    $handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] { param ($sender,

            $event) Write-Host «Message: $($event.Message)» };

    $SqlCommand.Connection.add_InfoMessage($handler);

    $success = $SqlCommand.ExecuteNonQuery();

    #now squirt the data in using the bulk copy library.

    $bulkCopy = new-object («Data.SqlClient.SqlBulkCopy») $DestinationConnectionString

    $bulkCopy.DestinationTableName = $DestinationTable

    $bulkCopy.BatchSize = 5000 #The number of rows in each batch sent to the server

    $bulkcopy.NotifyAfter = 200 #The number of rows to copy before firing a notification

    $bulkCopy.BulkCopyTimeout = 0 #the number of seconds before a time-out

    $objectEvent = Register-ObjectEvent $bulkcopy SqlRowsCopied -Action { write-host «Copied $($eventArgs.RowsCopied) rows « }

    $bulkCopy.WriteToServer($reader) #copy all rows to the server

}

catch

{

    $ex = $_.Exception

    Write-Error «Whilst doing the bulk copy ‘$($Query.CommandText)’ $ex.Message Sorry, but we can’t proceed because of this!»

}

$Reader.Close()

$SqlCommand.Connection.Close()

$Connection.Close()

OK, but does it work with real data? Off to the Health and Social Care Information Centre for some realistic data in spreadsheet form. I’ve included some data just so you don’t have to go to the site to play along, but it is far better to use the latest version of this data from the site. I’m sure I don’t have to tell you how easy this is to do in a script via PowerShell.

$ExcelFilePath=‘MyPathhosp-epis-stat-admi-tot-ops-11-12-tab.xlsx’ #the full path of the excel workbook

$Worksheet=‘Total procedures’ #this is the actual worksheet where the data is

$DataRange=  ‘A16:J1509’  #e.g. ‘A2:M33’  this is the range of the cells that make up the table. leave blank to read the whole worksheet

Also

$DestinationTable=‘Hosp’ # or whatever you want. The name of the SQL Server table where you want to put the data

 …and

$PrecisionForNumericData=0

 Try it. Whoosh. In it goes. If you were doing this as a routine, you’d be wanting to wrap this script into a function with parameters by now, but you know how to do this already, I’m sure. I’m trying to give you the ‘workbench’ narrative here.

Writing to Excel from SQL Server.

The process of going from SQL Server to excel via ODBC is, I think, needlessly complicated, especially if you use parameterised queries (excellent for SQL Server but they add very little for writing to Excel).In this example, I’ll do the old and horrible approach of using insert statements. There are other ways, including even using a dataset, but this is the most obvious.

I’m not particularly happy with this sample because Excel whines a bit when it opens it, saying that it is in the wrong format, (which it is, but you try naming it XLSX) but it deigns to open it.

“The file you are trying to open, ‘MyExcelFile.xls’, is in a different format than specified by the file extension. Verify that the file is not corrupted and is from a trusted source before opening the file. Do you want to open the file now?”

More seriously, it complains that the numbers in the columns are ‘formatted as text’. It turns out that the data is saved in the correct format, but the next time the file is opened, all columns revert to varchar. Seasoned users of ODBC gets used to the bugs, but if anyone knows of a workaround to this, I’d be grateful.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

set-psdebug -strict

$ErrorActionPreference = «stop»

$Sourceinstance = ‘MyServerOrInstance’ #the name of the server or instance

$Sourcedatabase = ‘AdventureWorks’ #the name of the datatabase where you want to get the data

#here is where we put the SQL command to get the result from the database

$SelectStatementForDatabase =

SELECT ProductNumber, p.Name AS ProductName, color,  SafetyStockLevel, ReorderPoint, StandardCost, ListPrice,

NonDiscountSales = (OrderQty * UnitPrice), Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)

FROM Production.Product AS p

INNER JOIN Sales.SalesOrderDetail AS sod

ON p.ProductID = sod.ProductID

where ((OrderQty * UnitPrice) * UnitPriceDiscount)>0

ORDER BY ProductName DESC;

«@

$SourceWindowsSecurity = $false #or $True if you are using Windows security

$SourceUserID = ‘SA’ #the name of the SQL Server user if not integrated security

$DestinationTable = ‘ProductWithDiscounts’

$DestinationExcelFilePath = ‘MyPathMyName.xls’ #the full path of the excel workbook

$DestinationHeader = $true # true if you want your first row to be read as column headers

#firstly, we create a connection string ‘on the fly’

#connect to the datanbase

#…and get the DataReader object

$SourceConnectionString = «Data Source=$Sourceinstance;Initial Catalog=$Sourcedatabase;$(

    if ($SourceWindowsSecurity) { ‘integrated security=true’ }

    else { ‘User Id=’ + $SourceUserID + ‘;Password=’ + «$(((Get-Credential $SourceUserID).GetNetworkCredential()).Password)» + ‘;integrated security=false’ })»

try

{

    #here we open a connection to the SQL Server source database

    $SqlCommand = new-object (‘Data.SqlClient.SqlCommand’)  $SelectStatementForDatabase, $SourceConnectionString;

    $SqlCommand.Connection.Open(); #we open the connection

    $handler = [System.Data.SqlClient.SqlInfoMessageEventHandler] {

        param ($sender,

            $event) Write-Host «Message: $($event.Message)»

    };

    $SqlCommand.Connection.add_InfoMessage($handler);

    $Reader = $SqlCommand.ExecuteReader([System.Data.CommandBehavior]::SequentialAccess) #get the datareader and just get the result in one gulp

}

catch

{

    $ex = $_.Exception

    Write-Error «whilst getting data from  $Sourceinstance  $Sourcedatabase ‘ : $ex.Message»

    exit

}

# excel has only the LOGICAL,CURRENCY,NUMBER,VARCHAR,DATETIME datatypes

# according to $connection.GetSchema(‘DATATYPES’).TypeName

# lets work out what the Excel datatype would be…

$columns = $reader.GetSchemaTable() | select columnName, datatype, @{

    name = ‘ExcelDatatype’; expression = {

        switch ($_.datatype)

        { { @(‘float’, ‘decimal’, ‘Numeric’) -contains $_ } { ‘Number’ } ‘bit’ { ‘logical’ } ‘int16’{ ‘Int’ } { @(‘smallmoney’, ‘money’) -contains $_ } { ‘currency’ } ‘DateTime’{ ‘datetime’ }

            default { ‘VarChar’ }

        }

    }

}

# now we need to create an equivalent worksheet in the Workbook.

#If there is no workbook, it will create it

$CreateScript =

CREATE TABLE $DestinationTable (

«@

$CreateScript += $columns | foreach-object{ «`n`t$($_.ColumnName.Trim())  $($_.ExcelDataType),» }

$CreateScript = $CreateScript.Substring(0, $CreateScript.Length 1) + «`n`t)»

# and make a columnlist for the insert statement.

$columnList = ‘[‘ + $columns[0].ColumnName + ‘]’

for ($ii = 1; $ii -le $columns.Length 1; $ii++) { $params += ‘,?’; $columnList += ‘ ,[‘ + $columns[$ii].ColumnName + ‘]’ }

try

{

    #to open the destination workbook or create it if not exist

    $Connection = New-Object system.data.odbc.odbcconnection

    $TheConnectionString = ‘Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=’ + $DestinationExcelFilePath + ‘;Mode=ReadWrite;ReadOnly=false;Extended Properties=»HDR=’ + «$(if ($DestinationHeader) { ‘YES’ }

        else { ‘NO’ })» + ‘»‘

    $Connection.ConnectionString = $TheConnectionString

    $Connection.Open()

    $insertionCommand = $Connection.CreateCommand()

}

catch

{

    $ex = $_.Exception

    Write-Error «whilst opening connection to  $DestinationExcelFilePath using ‘$($TheConnectionString)’ : $ex.Message»

    exit

}

try

{

    #if the table doesn’t exist we create it.

    $CreateTableCommand = $Connection.CreateCommand()

    $CreateTableCommand.CommandText = $CreateScript

    if ($connection.GetSchema(‘TABLES’).Table_Name -notcontains $DestinationTable)

    { if ($CreateTableCommand.ExecuteNonQuery() -eq -1) { write-host «created table (worksheet) $DestinationTable» } }

}

catch

{

    $ex = $_.Exception

    Write-Error «couldn’t create table with command $CreateScript : $ex.Message»

    exit

}

$rows = 0

try

{

    #now we create each insert statement on the fly! Developers look away, please

    while ($Reader.Read())

    {

        $insertcommand = «INSERT INTO [$destinationTable» + ‘$] (‘ + «$columnList) VALUES(«

        for ($i = 0; $i -lt $Reader.FieldCount; $i++)

        {

            $insertcommand += «$(if ($i -eq 0) { » }

                else { ‘,’ }) $(if ($columns[$i].ExcelDataType -eq ‘VarChar’) { «‘$($reader.GetValue($i) -replace «‘«, «»«)'» }

                else { «$($reader.GetValue($i))» }) «

        }

        $insertioncommand.CommandText = $insertcommand + ‘)’

        $rows += $insertionCommand.ExecuteNonQuery()

    }

}

catch

{

    $ex = $_.Exception

    Write-Error «whilst writing to column $i of file  $DestinationExcelFilePath ‘ : $ex.Message»

}

#we report what we’ve done.

write-host «Wrote $rows rows of $($columns.count) columns to worksheet $destinationTable»

$Reader.Close()

$SqlCommand.Connection.Close()

$connection.Close()

CSV and Delimited ODBC Sources: Text AdventureWorks.

Although the ACE drivers are used more by people reading Excel files, I must emphasize that there are drivers for a number of other formats. It is pretty easy, for example, to turn a bunch of CSV files into a relational database. Just to prove it, I’ve created a CSV/Text version of AdventureWorks, together with its schema.ini. This was originally created in this article The TSQL of CSV: Comma-Delimited of Errors. With this text-based database, you can do a lot of the sample AdventureWorks SQL examples with only a minor modification.

Once you’ve installed the ACE drivers, you’ll can use a modified version of the routine I showed you or exploring the PUBS Excel database to play along.

All you have to do is to unzip Text Adventureworks into a new directory with the name of your database (AdventureWorks) and point your connection string at the directory by giving it the full path to the directory. I just altered two lines

#set the directory in which your database should go.  

$TextFilePath=‘MyPathToTheDirectoryTextAdventureWorks’ #the path to the database

… and

$Connection.ConnectionString=‘Driver={Microsoft Access Text Driver (*.txt, *.csv)};DBQ=’+$TextFilePath+»

Now you should be ready with your text-based relational database.

You can, of course, create tables and write to them using the INSERT statement.

create table [Log#csv] (MyInteger int,TheDate date TheMessage char(125))

…and do insert statements into it. You can SELECT INTO as well, which is new to me. I didn’t notice this in previous incarnations of this driver.

With CREATE statements, you can use ‘BIT, BYTE , LONGCHAR, CURRENCY, INTEGER, SMALLINT, REAL, FLOAT, CHAR or DATETIME

(Out of curiosity, the OLEDB driver allows  Long, Single, Double, Currency, DateTime , Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar char and Decimal)

# You can list out the tables

$Connection.GetSchema(«tables»)|select table_name  

And the schema

$Connection.GetSchema(«columns»)|select tableName, ColumnName, cardinalPosition

 Here are a few of the SQL Statements that work

SELECT * into [gloves#csv]

FROM [Production_ProductModel#csv]

WHERE ProductModelID IN (3, 4)

 SELECT count(*) as [discounted]

 FROM [Production_Product#csv] AS p

 INNER JOIN [Sales_SalesOrderDetail#csv] AS sod

 ON p.ProductID = sod.ProductID

 where ((OrderQty * UnitPrice) * UnitPriceDiscount)>0

SELECT Name, ProductNumber, ListPrice AS Price

FROM [Production_Product#csv]

WHERE ProductLine = ‘R’

AND DaysToManufacture < 4

ORDER BY Name DESC

SELECT p1.ProductModelID

FROM [Production_Product#csv] AS p1

GROUP BY p1.ProductModelID

having p1.ProductModelID >100

SELECT p1.ProductModelID

FROM [Production_Product#csv] AS p1

GROUP BY p1.ProductModelID

HAVING MAX(p1.ListPrice) >= ALL

 (SELECT AVG(p2.ListPrice)

 FROM [Production_Product#csv] AS p2

 WHERE p1.ProductModelID = p2.ProductModelID)

SELECT top 50 SalesOrderID, SUM(LineTotal) AS SubTotal

FROM [Sales_SalesOrderDetail#csv]

GROUP BY SalesOrderID

ORDER BY SalesOrderID;

SELECT ProductModelID, Name

FROM [Production_ProductModel#csv]

WHERE ProductModelID IN (3, 4)

union all

SELECT ProductModelID, Name

FROM [Production_ProductModel#csv]

WHERE ProductModelID NOT IN (3, 4)

Conclusions

If only Microsoft put some energy into their whole range of ODBC drivers, including all the possible datastores that can be mapped to relational databases,  they’d be the obvious way of transferring data, and would put Microsoft in great shape for providing ‘big data’ solutions.. As it is, they are extraordinarily useful, but marred by  quirks and oddities.

For me, ODBC is the obvious way to  script  data from Excel or Access into SQL Server, for doing data imports.  

Справка по системе
ELMA KPI

×


Поиск

Поиск





Поиск




  •  Предыдущая
  • Следующая 

  (c) Company name, 201Copyright © 2006–2021 ELMA

ODBC – это открытый программный интерфейс доступа к различным базам данных: Oracle, MS SQL, MS Access, MS Excel и др.

Данная технология позволяет импортировать значения показателей из внешних источников данных в систему ELMA.

Требования для работы с источниками данных ODBС

Для успешного создания и работы источников данных ODBC должны быть выполнены следующие требования:

  • источник данных обязательно должен находиться на одной машине с сервером ELMA;

  • названия показателей внешнего источника данных должны совпадать с названиями показателей в системе ELMA;

  • для показателя, значения которого будут заполняться из источника данных ODBC, должен быть указан отвественный сотрудник;

  • при импорте значений персональных показателей должен быть указан логин пользователя в системе ELMA, которому соответствует персональное значение показателя;

  • при импорте данных из внешнего источника данных в систему ELMA файл данного источника должен быть закрыт.

Внимание!

Источник данных ODBC доступен на компьютере только под тем пользователем, под которым он был создан.

Импорт данных из внешнего источника в систему ELMA состоит из нескольких шагов:

Рассмотрим импорт данных на следующем примере: импортируем данные из файла MS Excel («Данные по отгрузке.xlsx») (рис. 1) в значения показателей Выручка (товары), Выручка (услуги).

Рис. 1. Содержание файла «Данные по отгрузке.xlsx»

Внимание!

Для вступления в силу любых изменений необходимо опубликовать модель показателей.

Создание источника данных ODBC в операционной системе Windows

Для создания источника данных в операционной системе Windows необходимо выполнить следующие действия:

  • открыть раздел Пуск – Панель управления – Администрирование – Источники данных ODBC. Будет открыто окно Администратор источника данных ODBC (рис. 2). В данном окне на вкладке Пользовательский DSN требуется нажать на кнопку Добавить…;

    Рис. 2. Окно «Администратор источника данных ODBC»

  • в открывшемся диалоговом окне (рис. 3) необходимо выбрать драйвер, для которого задается источник данных и нажать на кнопку Готово. В рассматриваемом примере это Microsoft Excel Driver;

    Рис. 3. Диалоговое окно «Создание нового источника данных»

  • в окне Установка драйвера ODBC для Microsoft Excel (рис. 4) необходимо ввести имя источника данных, выбрать файл, в котором находятся необходимые данные, и нажать на кнопку OK. Данное окно будет закрыто.

    Рис. 4. Диалоговое окно «Установка драйвера ODBC для Microsoft Excel»

После этого в окне Администратор источника данных ODBC отобразится созданный источник данных (рис. 5).

Рис. 5. Окно «Администратор источника данных ODBC». Созданный источник данных

Создание источника данных в Дизайнере ELMA

Для создания источника данных в Дизайнере ELMA необходимо на вкладке Показатели в разделе Источники данных в контекстном меню подраздела Источники данных ODBC выбрать пункт Создать (рис. 6).

Рис. 6. Дизайнер ELMA. Вкладка «Показатели». Раздел «Сбор данных». Контекстное меню подраздела «Источники данных ODBC». Кнопка «Создать»

Будет открыто окно Создать источник данных ODBC (рис. 7). Данное окно состоит из 3 вкладок: Настройки, Загрузка, Таблица. В данном окне требуется заполнить необходимые поля и нажать на кнопку OK.

Рис. 7. Окно «Создать источник данных ODBC»

Вкладка «Настройки»

Название* – название создаваемого источника данных. Данное поле является обязательным для заполнения.

Источник данных* – внешний источник данных. Данное поле является обязательным для заполнения.

Для выбора внешнего источника данных необходимо нажать на кнопку справа от поля и в открывшемся окне (рис. 8) выбрать требуемый источник данных. В рассматриваемом примере – Данные по отгрузке.

Рис. 8. Диалоговое окно «Выберите ODBC соединение»

Запрос – запрос на языке SQL для выбора необходимых данных из внешнего источника.

– проверка синтаксиса запроса не сервере. В случае нахождения ошибок они будут отображены ниже в таблице Ошибки.

– эмуляция запроса на сервере. Во время эмуляции происходит выполнение запроса, однако изменения в базе данных не осуществляются. При этом в поле Консоль будет отображена подробная информация об импортируемых значениях показателей.

– запуск процесса импорта данных из выбранного источника данных в значения соответствующих показателей. При этом в поле Консоль будет отображена подробная информация об импортируемых значениях показателей.

Ошибки – таблица, содержащая список ошибок, обнаруженных при проверке и эмуляции запроса.

Консоль – поле, содержащее информацию о процессе импорта.

Вкладка «Загрузка»

Пример данной вкладки представлен на рис. 9.

Рис. 9. Окно создания источника данных ODBC. Вкладка «Загрузка»

На данной вкладке осуществляется настройка соответствия импортируемых значений и свойств показателей.

Блок «Показатель»

В данном блоке из выпадающего списка необходимо выбрать количество показателей, в которые будут загружены данные из внешнего источника: Загрузка нескольких показателей или Загрузка одного показателя.

В случае, если выбран вариант Загрузка нескольких показателей, ниже в данном блоке будет отображено поле Выбрать столбец. В данном поле из выпадающего списка необходимо выбрать столбец источника данных, в котором содержатся названия необходимых показателей.

В случае, если выбран вариант Загрузка одного показателя, ниже в данном блоке будет отображено поле Выбрать из списка, в котором необходимо выбрать показатель, в который будут загружаться данные из внешнего источника.

В рассматриваемом примере будет осуществлена загрузка данных сразу в несколько показателей. Пример загрузки данных в один показатель см. на соответствующей странице справки.

Блок «Данные»

В данном блоке необходимо установить соответствие импортируемых значений и свойств показателей.

  • План – столбец источника данных, в котором находятся плановые значения показателя.

  • Факт – столбец источника данных, в котором находятся фактические значения показателя.

  • Дата – столбец источника данных, в котором находится дата импортируемых значений.

  • Ответственный/Элемент ряда – столбец источника данных, в котором записан пользователь, ответственный за ввод данных/пользователь, для которого импортируются значений показателей (для персональных показателей)

Следует отметить, что поля План и Факт не могут быть одновременно пустыми. Требуется установить соответствие хотя бы для одного из них. Соответствия для рассматриваемого примера представлены на рис. 9. 

Вкладка «Таблица»

На данной вкладке (рис. 10) отображаются данные, которые будут импортированы в систему ELMA.

Рис. 10. Окно создания источника данных ODBC. Вкладка «Таблица»

Редактирование источника данных ODBC

Редактирование источника данных ODBC осуществляется в его карточке. Карточка источника данных ODBC состоит из 3 вкладок, аналогичных вкладкам в окне создания источника данных.

Открыть карточку источника данных ODBC для редактирования можно двумя способами:

  • на вкладке Показатели в разделе Сбор данных в подразделе Источники данных – Источники данных ODBC в контекстном меню необходимого источника данных выбрать пункт Редактировать свойства (рис. 11);

    Рис. 11. Контекстное меню источника данных ODBC. Пункт «Редактировать свойства»

  • дважды щелкнуть левой мыши по названию необходимого источника данных ODBC.

Удаление источника данных ODBC

Для того, чтобы удалить источник данных ODBC, необходимо в контекстном меню источника данных ODBC выбрать пункт Удалить (рис. 12) и подтвердить удаление нажатием на кнопку Удалить.

Рис. 12. Контекстное меню источника данных ODBC. Пункт «Удалить»

См. также:

Содержание

  1. Подключение Excel к Apache Hadoop с помощью драйвера Microsoft Hive ODBC в Azure HDInsight
  2. Предварительные требования
  3. Установка драйвера Microsoft Hive ODBC
  4. Создание источника данных Apache Hive ODBC
  5. Импорт данных в Excel из службы HDInsight
  6. Дальнейшие действия
  7. Управление источниками данных ODBC
  8. В этой статье
  9. Сведения об источниках данных ODBC
  10. Машинные источники данных
  11. Файловые источники данных
  12. Строки подключения
  13. Добавление источника данных ODBC
  14. Настройка источника данных Microsoft Excel с использованием ODBC
  15. Пути к данным через Excel

Подключение Excel к Apache Hadoop с помощью драйвера Microsoft Hive ODBC в Azure HDInsight

Решение Майкрософт для работы с большими данными включает в себя компоненты бизнес-аналитики (БА) Майкрософт с кластерами Apache Hadoop, развернутыми в HDInsight. Примером может служить возможность подключения Excel к хранилищу данных Hive кластера Hadoop. Подключение с помощью драйвера Microsoft Hive Open Database Connectivity (ODBC).

Вы можете подключить данные, связанные с кластером HDInsight, из Excel с помощью надстройки Microsoft Power Query для Excel. Дополнительные сведения см. в статье Подключение Excel к HDInsight с помощью Power Query.

Предварительные требования

Перед началом работы с этой статьей необходимо иметь следующее:

  • Кластер HDInsight Hadoop. Дополнительные сведения о создании кластера см. в статье Приступая к работе с Hadoop в HDInsight.
  • Рабочая станция с Office 2010 Professional Plus или более поздней версии или Excel 2010 или более поздней версии.

Установка драйвера Microsoft Hive ODBC

Скачайте и установите драйвер Microsoft Hive ODBC. Выберите версию, которая соответствует версии приложения, где будет использоваться драйвер ODBC. В рамках данной статьи используется драйвер для Office Excel.

Создание источника данных Apache Hive ODBC

Ниже показано, как создать источник данных Hive ODBC.

В Windows откройте Пуск > Средства администрирования Windows > Источники данных ODBC (32-разрядная или 64-разрядная версия). В результате откроется окно Администратор источников данных ODBC.

На вкладке DSN пользователя выберите Добавить, чтобы открыть окно Создание нового источника данных.

Выберите Microsoft Hive ODBC Driver, а затем — Готово, чтобы открыть окно Microsoft Hive ODBC Driver DSN Setup (Настройка DSN Microsoft Hive ODBC Driver).

Введите или выберите следующие значения:

Свойство Описание
Имя базы данных-источника Присвойте имя источнику данных
Узлы Введите HDInsightClusterName.azurehdinsight.net . Например, myHDICluster.azurehdinsight.net . Примечание. HDInsightClusterName-int.azurehdinsight.net поддерживается до тех пор, пока клиентская виртуальная машина соединена с той же виртуальной сетью.
Порт Используйте 443. (Этот порт был изменен с 563 на 443.)
База данных Используйте значение по умолчанию.
Механизм Выберите Windows Azure HDInsight Service.
Имя пользователя Введите имя пользователя HTTP кластера HDInsight. Имя пользователя по умолчанию — admin .
Пароль Введите пароль пользователя кластера HDInsight. Установите флажок Save Password (Encrypted) (Сохранить пароль (зашифрованный)).

Необязательно: выберите Дополнительные параметры.

Параметр Описание
Использовать исходный запрос При выборе этого параметра драйвер ODBC НЕ пытается преобразовать TSQL в HiveQL. Следует использовать только при полной уверенности в отправке действительных инструкций HiveQL. При подключении к серверу SQL Server или базе данных Azure SQL необходимо снять этот флажок.
Строки, загружаемые для каждого блока При получении большого объема записей включение этого параметра может обеспечить оптимальную производительность.
Длина столбца строки по умолчанию, длина столбца двоичного кода, масштаб столбца десятичных значений Длина и точность типа данных может повлиять на способ выведения данных. Это приведет к возврату недопустимой информации из-за потери точности и/или усечения.

Щелкните Тест для проверки источника данных. При правильной настройке источника результатом теста будет слово УСПЕШНО! .

Нажмите кнопку ОК, чтобы закрыть окно тестов.

Нажмите кнопку ОК, чтобы закрыть окно Microsoft Hive ODBC Driver DSN Setup (Настройка DSN Microsoft Hive ODBC Driver).

Нажмите кнопку ОК, чтобы закрыть окно Администратор источников данных ODBC.

Импорт данных в Excel из службы HDInsight

Ниже описан способ импорта данных из таблицы Hive в рабочую книгу Excel с помощью источника данных ODBC, созданного в предыдущем разделе.

Откройте новую или существующую рабочую книгу в Excel.

На вкладке Данные перейдите к разделу Получить данные>Из других источников>Из ODBC, чтобы открыть окно Из ODBC.

Из раскрывающегося списка выберите имя источника данных, который вы создали в предыдущем разделе, и нажмите ОК.

При первом использовании откроется диалоговое окно Драйвер ODBC. В меню слева выберите пункт Windows. Затем нажмите кнопку Подключиться, чтобы открыть окно Навигатор.

В окне Навигатор перейдите к HIVE>по умолчанию>hivesampletable, а затем нажмите кнопку Загрузить. Для импорта данных в Excel потребуется несколько секунд.

Дальнейшие действия

В рамках этой статьи вы узнали, как получить данные из службы HDInsight в Excel с помощью драйвера Microsoft Hive ODBC. Аналогичным образом можно получать данные из службы HDInsight в базу данных SQL. Можно также передавать данные в службу HDInsight. Дополнительные сведения см. на следующих ресурсах:

Источник

Управление источниками данных ODBC

Open Database Connectivity (ODBC) — это протокол, используемый для подключения базы данных Microsoft Access к внешнему источнику данных, например Microsoft SQL Server. В этой статье содержатся общие сведения об источниках данных ODBC, способах их создания и подключения к ним с помощью Microsoft Access. Действия, которые требуется выполнить, зависят от используемых баз данных и драйверов ODBC.

В этой статье

Сведения об источниках данных ODBC

Источник данных — это источник, который содержит данные и сведения о подключении, необходимые для доступа к этим данным. Источником данных может быть сервер SQL Server, реляционная СУБД Oracle, электронная таблица или текстовый файл. Сведения о подключении могут включать расположение сервера, имя базы данных, идентификатор входа, пароль и различные параметры драйвера ODBC, описывающие способ подключения к источнику данных. Эти сведения можно получить у администратора базы данных, к которой нужно подключиться.

В архитектуре ODBC приложения (такие как Access) подключаются к диспетчеру драйверов ODBC, который, в свою очередь, использует конкретный драйвер ODBC (например, Microsoft SQL ODBC) для подключения к источнику данных. В Access источники данных ODBC используются для подключения к внешним источникам данных, у которых нет встроенных драйверов.

Чтобы подключиться к такому источнику данных, выполните указанные ниже действия.

Установите соответствующий драйвер ODBC на компьютере с источником данных.

Определите имя источника данных (DSN) с помощью программы Администратор источников данных ODBC, чтобы сохранить сведения о подключении в реестре Microsoft Windows или DSN-файле, либо с помощью строки подключения в коде Visual Basic, чтобы передать сведения о подключении непосредственно диспетчеру драйверов ODBC.

Машинные источники данных

Машинные источники данных хранят сведения о подстройке в реестре Windows на конкретном компьютере. Машинные источники данных можно использовать только на том компьютере, на который они были определены. Существует два типа машинных источников данных — пользовательские и системные. Источники данных пользователя могут использоваться только текущим пользователем и видны только этому пользователю. Источники данных в системе могут использоваться всеми пользователями на компьютере и видны всем пользователям на компьютере и в службах в масштабе системы. Машинный источник данных особенно полезен, если требуется обеспечить дополнительные сведения о безопасности, так как просматривать его могут только пользователи, которые вошли в систему, и его невозможно скопировать удаленным пользователем на другой компьютер.

Файловые источники данных

Файловые источники данных (также называемые DSN-файлами) хранят сведения о подключении в текстовых файлах, а не в реестре Windows, и, как правило, более гибки в использовании, чем машинные источники данных. Например, файловый источник данных можно скопировать на любой компьютер с подходящим драйвером ODBC, чтобы обеспечить в приложении точность и согласованность сведений о подключении ко всем используемым компьютерам. Кроме того, можно поместить файловый источник данных на отдельный сервер, сделать его общим для нескольких компьютеров в сети и легко управлять централизованными сведениями о подключении.

Некоторые файловые источники данных нельзя сделать общими. Такие источники располагаются на отдельном компьютере и указывают на машинный источник данных. Их можно применять для доступа к существующим машинным источникам данных из файловых источников данных.

Строки подключения

В модуле можно определить отформатированную строку подключения, которая определяет сведения о подключении. Строка подключения передает сведения о подключении непосредственно диспетчеру драйверов ODBC и упрощает приложение, убирая требования к созданию DSN системным администратором или пользователем перед использованием базы данных.

Дополнительные сведения об интерфейсе ODBC см. в разделе MSDN Справочник программиста по ODBC.

Добавление источника данных ODBC

Прежде чем продолжить, установите подходящий драйвер ODBC для источника данных, к которому нужно подключиться.

Примечание: Для добавления или настройки источника данных ODBC необходимо входить в группу администраторов локального компьютера.

Нажмите кнопку Пуск и выберите пункт Панель управления.

На панели управления дважды щелкните элемент Администрирование.

В диалоговом окне «Администрирование» дважды щелкните элемент Источники данных (ODBC).

Откроется диалоговое окно Администратор источников данных ODBC.

Откройте вкладку Пользовательский DSN, Системный DSN или Файловый DSN в зависимости от типа источника данных, который нужно добавить. Дополнительные сведения см. в разделе Сведения об источниках данных ODBC.

Нажмите кнопку Добавить.

Выберите драйвер, который нужно использовать, и нажмите кнопку Готово или Далее.

Если необходимого драйвера нет в списке, обратитесь к администратору базы данных, к которой нужно подключиться, и узнайте, как получить этот драйвер.

Следуйте указаниям и введите требуемые сведения о подключении в последующих диалоговых окнах.

Для получения дополнительных сведений об отдельных параметрах нажмите кнопку Справка в диалоговом окне ODBC.

Источник

Настройка источника данных Microsoft Excel с использованием ODBC

Возможно, потребуется щелкнуть ссылку категории «Производительность и обслуживание» или «Система и безопасность» в зависимости от операционной системы.

  • В диалоговом окне «Администратор источников данных ODBC» выполните одну из следующих операций:
    • Перейдите на вкладку «Пользовательский DSN», чтобы создать источник данных, видимый только для создавшего его пользователя и доступного только на компьютере, использованном для создания.
    • Перейдите на вкладку «Системный DSN», чтобы создать источник данных, видимый для всех пользователей с правами доступа на данном компьютере.
    • Перейдите на вкладку «Файловый DSN», чтобы создать источник данных, к которому могут получить доступ все пользователи, на компьютерах которых установлены такие же драйверы ODBC.
  • Нажмите «Добавить».
  • Выделите «Драйвер Microsoft Excel» и нажмите кнопку «Готово».
  • Введите имя для источника данных в поле «Имя источника данных» и выберите версию Excel из списка «Версия».
  • Убедитесь, что флажок «Использовать текущий каталог» сброшен.
  • Нажмите кнопку «Выбор книги», а затем найдите и выберите книгу или электронную таблицу, которую необходимо настроить. Нажмите «ОК».
  • В диалоговом окне «Установка драйвера ODBC для Microsoft Excel» нажмите кнопку «OK».
  • В диалоговом окне «Администратор источников данных ODBC» нажмите «OK».
  • Источник

    Пути к данным через Excel

    Если данные всегда в пути, Excel похож на главный центральный станция. Представьте, что данные — это поезд, который регулярно посещает Excel, вносит изменения, а затем покидает его. Существует множество способов войти в Excel, при котором данные всех типов будут импортироваться, и список будет постоянно расти. После того как данные уже есть в Excel, вы можете изменить фигуру в нужном виде с помощью Power Query. Для бесперебойной работы данных, как и для всех нас, требуется «уход и подача». Сюда приходят свойства подключения, запроса и данных. Кроме того, данные сют с док-станции Excel во многих случаях: они импортируются из других источников, делятся как отчеты, диаграммы и совые таблицы, а также экспортируются в Power BI и Power Apps.

    Вот основные вещи, которые можно делать, когда данные находятся на поезде Excel:

    Импорт Вы можете импортировать данные из различных внешних источников. Эти источники данных могут быть на вашем компьютере, в облаке или на полпути по всему миру. Дополнительные сведения см. в теме «Импорт данных из внешних источников данных».

    Power Query С помощью Power Query (ранее — » Get & Transform») можно создавать запросы для фигуры, преобразования и объединения данных различными способами. Вы можете экспортировать свою работу как шаблон Power Query, чтобы определить операцию потока данных в Power Apps. Вы даже можете создать тип данных в дополнение к связанным типамданных. Дополнительные сведения см. в справке Power Query для Excel.

    Безопасность Конфиденциальность данных, учетные данные и проверка подлинности всегда являются проблемой. Дополнительные сведения см. в сведениях об управлении настройками и разрешениями источников данных, а также настройке уровней конфиденциальности.

    Обновить Для внесения в Excel изменений, например дополнений, обновлений и удаления, обычно требуется операция обновления. Дополнительные сведения см. в теме «Обновление подключения к внешним данным в Excel».

    Подключения и свойства Каждый внешний источник данных имеет связь с данными о каждом внешнем источнике данных и связанную с ним информацию о свойстве, которая иногда требует внесения изменений в зависимости от обстоятельств. Дополнительные сведения см. в дополнительных сведениях об управлении диапазонами внешних данных и их свойствами, создании,редактировании подключений к внешним данным и свойствах подключения.

    Устаревшая версия Традиционные методы, такие как устаревшие мастеры импорта и MSQuery, по-прежнему доступны. Дополнительные сведения см. в параметрах импорта и анализа данных, а также извлечении внешних данных с помощью Microsoft Query.

    В следующих разделах более подробные сведения о том, что происходит за кадром на этом занятом поезде Excel.

    Существуют свойства подключения, запроса и диапазона внешних данных. Оба свойства подключения и запроса содержат традиционные сведения о под соединении. В заголовке диалогового окна «Свойства подключения» означает, что с ним не связан ни один запрос, а с свойствами запроса — нет. Свойства диапазона внешних данных контролируют макет и формат данных. Во всех источниках данных есть диалоговое окно «Свойства внешних данных», но для источников данных со связанными учетными данными и данными обновления используется большее диалоговое окно «Свойства внешних данных диапазона».

    В следующих сведениях общались наиболее важные диалоговые окна, области, пути к командам и соответствующие разделы справки.

    Диалоговое окно или области
    Пути команд

    Вкладки и туннель

    Основной раздел справки

    Данные> последние источники

    Tunnels to Connect > Navigator dialog box

    Свойства подключения
    МАСТЕР
    подключения к данным OR

    Data > Queries & Connections > Connections tab > (right click a connection) > Properties

    Вкладка Usage
    Definition Used In
    (Использовано в)

    Data> Existing Connections > (right click a connection) > Edit Connection Properties
    ИЛИ
    запросы> данных & подключения к| Вкладка «> «Запросы» (щелкните правой кнопкой мыши подключение) > свойств
    Или
    свойства> запроса
    Or
    Data> Refresh All> Connections (when positioned on a loaded query worksheet)

    Вкладка Usage
    Definition Used In
    (Использовано в)

    Data > Queries & Connections

    Вкладка «Подключения»
    вкладки «Запросы»

    Данные> существующие подключения

    Вкладка «Таблицы»
    в вкладке «Подключения»

    Свойства внешних данных
    ИЛИ
    свойства диапазона внешних данных
    Или
    свойства> данных (отключено, если не занесо на таблицу запроса)

    Используется на вкладке (в диалоговом окне «Свойства подключения»)

    Кнопка «Обновить» в правом туннелье в свойствах запроса

    Свойства подключения > «Определение» > «Экспорт файла подключения»
    Or
    Query> Export Connection File

    Tunnels to
    File dialog box
    Data sources folder

    Данные в книге Excel могут быть из двух разных мест. Данные могут храниться непосредственно в книге или во внешнем источнике данных, например в текстовом файле, базе данных или кубе OLAP. Этот внешний источник данных подключается к книге с помощью подключения к данным, которое является набором сведений о том, как найти внешний источник данных, войти в систему и получить к нему доступ.

    Основное преимущество подключения к внешним данным — возможность периодически анализировать эти данные без многократного копирования в книгу (это операция, которая может быть трудоемкой и частой). После подключения к внешним данным вы также можете автоматически обновлять (обновлять) книги Excel из исходного источника при обновлении источника данных с новой информацией.

    Сведения о под соединении хранятся в книге и также могут храниться в файле подключения, например в файле подключения к данным Office (ODC) или файле имени источника данных (DSN).

    Чтобы внести внешние данные в Excel, необходим доступ к ним. Если доступ к внешнему источнику данных не находится на локальном компьютере, может потребоваться обратиться к администратору базы данных, чтобы узнать пароль, разрешения пользователей или другие сведения о под соединении. Если источником данных является база данных, убедитесь, что она не открыта в монопольном режиме. Если источником данных является текстовый файл или таблица, убедитесь, что другие пользователи не имеют доступа к ним.

    Для многих источников данных для координации потока данных между Excel, файлом подключения и источником данных также требуется драйвер ODBC или поставщик OLE DB.

    На следующей схеме ключевых моментах подключения к данным нет.

    1. Существуют различные источники данных, к которые можно подключиться: службы Analysis Services, SQL Server, Microsoft Access, другие реляционные базы данных OLAP, электронные таблицы и текстовые файлы.

    2. У многих источников данных есть связанный драйвер ODBC или поставщик OLE DB.

    3. Файл подключения определяет все сведения, необходимые для доступа к источнику данных и извлечения данных из него.

    4. Данные подключения копируется из файла подключения в книгу, и их можно легко изменить.

    5. Данные копируется в книгу, чтобы их можно было использовать точно так же, как и данные, хранимые непосредственно в книге.

    Чтобы найти файлы подключения, используйте диалоговое окно «Существующие подключения». (Выберите «Данные> существующие подключения.) В этом диалоговом окне можно увидеть следующие типы подключений:

    Подключения в книге

    В этом списке отображаются все текущие подключения в книге. Список создается на окне подключений, которые вы уже определили, с помощью диалоговых окна «Выбор источника данных» мастера подключения к данным, или на окне подключений, выбранных в этом диалоговом окне как подключение.

    Файлы подключения на компьютере

    Этот список создается из папки «Мои источники данных», которая обычно хранится в папке «Документы».

    Файлы подключения в сети

    Этот список можно создать на основе набора папок в локальной сети, расположение которых можно развернуть в сети при развертывании групповых политик Microsoft Office или библиотеки SharePoint.

    Excel также можно использовать в качестве редактора файлов подключений для создания и изменения подключений к внешним источникам данных, которые хранятся в книге или файле подключения. Если нужного подключения нет, вы можете создать подключение, нажав кнопку «Обзор» и выбрав диалоговое окно «Выбор источника данных», а затем нажав кнопку «Создать источник», чтобы запустить мастер подключения к данным.

    После создания подключения вы можете использовать диалоговое окно «Свойства подключения» (выберите «Свойства подключения» >«Запросы & Подключения >» > (щелкните правой кнопкой мыши «Свойства > подключения») для управления различными настройками подключений к внешним источникам данных, а также использования, повторного использования или переключения файлов подключения.

    Примечание Иногда диалоговое окно «Свойства подключения» называется диалогом «Свойства запроса», если с ним связан запрос, созданный в Power Query (прежнее название — «& Преобразовать»).

    Если для подключения к источнику данных используется файл подключения, Excel копирует сведения о подключении из файла подключения в книгу Excel. При внесении изменений в диалоговом окне «Свойства подключения» вы редактируете данные подключения к данным, хранимые в текущей книге Excel, а не исходный файл подключения, который мог использоваться для создания подключения (указывается именем файла, которое отображается в свойстве «Файл подключения» на вкладке «Определение»). После изменения данных подключения (за исключением свойств «Имя подключения» и «Описание подключения») ссылка на файл подключения удаляется, а свойство «Файл подключения» удаляется.

    Чтобы гарантировать, что файл подключения всегда используется при обновлении источника данных, на вкладке «Определение» нажмите кнопку «Всегда пытаться использовать этот файл для обновления данных». Если этот установить, все книги, которые используют этот файл подключения, всегда будут использовать изменения файла подключения, для которых также должно быть за установлено это свойство.

    В диалоговом окне Connections можно легко управлять этими подключениями, включая их создание, редактирование и удаление (выберите данные> Запросы & Connections > Connections > > (щелкните правой кнопкой мыши подключение) > Свойства.) В этом диалоговом окне можно сделать следующее:

    Создание, изменение, обновление и удаление подключений, которые используются в книге.

    Проверьте источник внешних данных. Это можно сделать, если подключение было определено другим пользователем.

    Показывать, где каждое подключение используется в текущей книге.

    Диагностика сообщения об ошибке, которое касается подключений к внешним данным.

    Перенаправить подключение к другому серверу или источнику данных или заменить файл подключения для существующего подключения.

    Легко создавайте файлы подключения и делитесь ими с пользователями.

    Файлы подключений особенно полезны для совместного доступа к подключениям, что делает подключения более обнаруживаемыми, повышает уровень безопасности подключений и облегчает администрирование источников данных. Лучший способ поделиться файлами подключения — поместить их в безопасное и надежное расположение, например в сетевую папку или библиотеку SharePoint, где пользователи могут читать файл, но только назначенные пользователи могут изменять его. Дополнительные сведения см. в подмноговом окне «Совместное передачу данных с помощью ODC».

    Вы можете создавать файлы подключения к данным Office (ODC), подключаясь к внешним данным с помощью диалоговых окна «Выбор источника данных» или с помощью мастера подключения к новым источникам данных. В ODC-файле для хранения сведений о под соединении используются пользовательские HTML- и XML-теги. Вы можете легко просматривать и редактировать содержимое файла в Excel.

    Вы можете поделиться файлами подключения с другими людьми, чтобы предоставить им такой же доступ к внешнему источнику данных. Другим пользователям не требуется настроить источник данных для открытия файла подключения, но им может потребоваться установить драйвер ODBC или поставщик OLE DB, необходимый для доступа к внешним данным на компьютере.

    Рекомендуется использовать ODC-файлы для подключения к данным и обмена данными. Вы можете легко преобразовать другие традиционные файлы подключения (DSN, UDL и файлы запросов) в ODC-файл, открыв файл подключения и нажав кнопку «Экспорт файла подключения» на вкладке «Определение» в диалоговом окне «Свойства подключения».

    Использование файлов запросов

    Файлы запросов — это текстовые файлы, которые содержат сведения об источнике данных, включая имя сервера, на котором находятся данные, и сведения о под соединении, которые вы предоставляете при создании источника данных. Файлы запросов — это традиционный способ поделиться запросами с другими пользователями Excel.

    Использование DQY-файлов запросов С помощью Microsoft Query можно сохранять DQY-файлы, содержащие запросы на данные из реляционных баз данных или текстовых файлов. Открыв эти файлы в Microsoft Query, вы можете просмотреть данные, возвращенные запросом, и изменить запрос, чтобы получить другие результаты. DQY-файл можно сохранить для любого запроса, который вы создаете, с помощью мастера запросов или непосредственно в Microsoft Query.

    Использование OQY-файлов запросов OQY-файлы можно сохранять для подключения к данным в базе данных OLAP на сервере или в автономный файл куба (.cub). При создании источника данных для базы данных или куба OLAP с помощью мастера многомерных подключений автоматически создается OQY-файл. Так как базы данных OLAP не уорганизованы в записи или таблицы, для доступа к ним нельзя создавать запросы и DQY-файлы.

    Использование RQY-файлов запросов Excel может открывать файлы запросов в формате RQY, чтобы поддерживать драйверы источников данных OLE DB, которые используют этот формат. Дополнительные сведения см. в документации к драйверу.

    Использование файлов запросов QRY Microsoft Query может открывать и сохранять файлы запросов в формате QRY для использования с более ранними версиями Microsoft Query, в которые не удается открыть DQY-файлы. Если у вас есть файл запроса в формате QRY, который вы хотите использовать в Excel, откройте его в Microsoft Query, а затем сохраните в формате DQY. Сведения о сохранении DQY-файлов см. в справке Microsoft Query.

    Использование файлов веб-запроса Iqy Excel может открывать файлы веб-запросов Iqy для извлечения данных из Интернета. Дополнительные сведения см. в теме «Экспорт в Excel из SharePoint».

    Диапазон внешних данных (также называемый таблицей запроса) — это определенное имя или имя таблицы, которое определяет расположение данных, передаренных на таблицу. При подключении к внешним данным Excel автоматически создает диапазон внешних данных. Единственным исключением из этого правила является отчеты pivotttable, подключенные к источнику данных, в которых не создается диапазон внешних данных. В Excel можно форматирование и разложить диапазон внешних данных или использовать его в вычислениях, как и любые другие данные.

    Excel автоматически называет диапазон внешних данных следующим образом:

    Имена внешних данных в диапазоне от файлов подключения к данным Office (ODC) и имени файла одинаковы.

    Диапазоны внешних данных из баз данных называются именем запроса. По Query_from_ источником данных является имя источника данных, который использовался для создания запроса.

    Диапазоны внешних данных от текстовых файлов называются текстовыми именами файлов.

    Диапазоны внешних данных от веб-запросов называются именем веб-страницы, на которой были извлечены данные.

    Если на вашем компьютере несколько диапазонов внешних данных из одного источника, они нуметы. Например, MyText, MyText_1, MyText_2 и т. д.

    У диапазона внешних данных есть дополнительные свойства (которые не следует путать с свойствами подключения), которые можно использовать для управления данными, например для сохранения форматирования ячеок и ширины столбцов. Эти свойства диапазона внешних данных можно изменить, нажав кнопку «Свойства» в группе «Подключения» на вкладке «Данные» и внося изменения в диалоговые окна «Свойства диапазона внешних данных» или «Свойства внешних данных».

    Существует несколько объектов данных (например, диапазон внешних данных и отчеты в отчете, которые можно использовать для подключения к различным источникам данных). Однако тип источника данных, к который можно подключиться, отличается от типа каждого объекта данных.

    Вы можете использовать и обновлять подключенные данные в службы Excel. Как и для любого внешнего источника данных, может потребоваться проверка подлинности для доступа. Дополнительные сведения см. в теме «Обновление подключения к внешним данным в Excel». Fдополнительные сведения об учетных данных см. в службы Excel параметрах проверки подлинности.

    В таблице ниже общались сведения о том, какие источники данных поддерживаются для каждого объекта данных в Excel.

    Excel
    данные
    объект

    Создает Внешняя
    данные
    диапазон?

    Источник

    Понравилась статья? Поделить с друзьями:
  • Источники в word 2007
  • Источник списка должен быть списком с разделителями или ссылкой на одну строку или столбец excel
  • Источник данных сводной таблицы excel 2016
  • Источник данных диаграммы excel где находится
  • Источник данных в excel 2010