Does the MongoDB Driver support MongoDB 3.4?

Yes, current versions of the Simba MongoDB drivers support MongoDB 3.4.

My Simba MongoDB Driver can connect, but it seems to take quite a while

ODBC requires predefined schema in order to work. As a denormalized, schemaless data source, MongoDB data does not store this type of metadata and therefore the driver must inference it by reading a subset of the data. This process is called sampling.

Based on the size and complexity of your data, this sample time can take anywhere from a few seconds to a few minutes for large datasets.

The driver connection time can be improved by using a cached schema map, which can be created using the provided Schema Editor Tool. Using a schema map allows the driver to skip the sample step on connection, dramatically improving the connection time.

For detailed instructions, see the full documentation located here.

How do I define a schema for my connection?

To enable ODBC/JDBC applications to work with MongoDB data, the Simba MongoDB Driver maps MongoDB data types to SQL data types. The schema, which is called the “active metadata” when it is being used by the driver, determines how the driver maps the data types.

If the driver is connected without providing a target schema map, the driver will generate an in-memory schema map during the connection process. The drawback of this is that sampling needs to occur on each connection.

You can also manually define a schema and store it to the database to shared with other users or save it to a local JSON file for personal use. Using a manually defined schema map will skip the sample step, and can dramatically improve the overall sample time.

For detailed instructions, see the full documentation located here.

Does the driver support write-back?

Yes, it supports DML (INSERT, UPDATE, DELETE). The driver does NOT support CREATE, ALTER or DROP.

How are nested arrays represented via the MongoDB driver?

Please see the “Virtual Tables” section of the user guide.

How are nested documents represented via the MongoDB driver?

Nested documents are flattened and displayed as part of the parent document with a column name like parentName_childName.

I do not want the schema the driver uses to be held within MongoDB, what can I do?

The driver allows you to specify a local file to read the schema from, instead of reading from MongoDB. Note that a drawback to this approach is that the schema is only available to you, and if you publish a report using the local schema, then it may not work for other users unless they also possess the same schema file that you are using. Please see the user guide for more information.

If I only generate schema for certain collections in my database, will the other collections be visible to the driver?

No, if you create a schema file, only collections that are sampled and present in the schema file will be made visible by the driver.

I can't see one of my databases/tables/columns

The Simba MongoDB Driver relies on sampled data to use as metadata for ODBC/JDBC calls. This data is stored in a schema map which can either be generated and cached using the provided Schema Editor tool or is generated on-the-fly by the driver during connection. Since sampling the entire data set can take a long time for a large dataset, the driver attempts to inference the schema based on a subset or “sample” of the data. If a database, table or column appears missing, check your sampling settings and resample.

Sampling stops unexpectedly due to a Java Heap Space error when using 32-bit Schema Editor

The MongoDB ODBC Driver ships as either a 32-bit or a 64-bit program. The both versions of the driver sample the data in MongoDB database and map the MongoDB attributes to their equivalent SQL objects. This information is stored is stored in a schema map which is stored in the database or locally as a JSON file on the hard drive. Included with each driver is a standalone Java application called the Schema Editor. Schema Editor allows users to create, view and modify schema maps. The 32-bit version of the driver includes the 32-bit version of the Schema Editor and the 64-bit version of the driver includes the 64-bit version of the Schema Editor. As Schema Editor is a Java application, it uses the Java Virtual Machine (JVM) for execution. By default, the 32-bit JVM uses a lower maximum size of its memory allocation pool than that of the 64-bit JVM. The 32-bit SchemaEditor.exe uses 1024Mb as the max size and 256Mb as the initial size of the memory allocation pool. While this should be sufficient for most cases, for situations where the MongoDB documents have deeply-nested structures or a very large (thousands) of attributes the maximum memory allowed for the JVM may be exceeded. Should you encounter an issue where you encounter this in the form of a Java heap space error, you can launch Schema Editor by specifying larger initial and maximum values for the memory allocation pool as follows by using command line to open the SchemaEditor.jar located in the Tools folder of the install directory:

The -Xmx flag specifies the maximum memory and -Xms specifies the initial amount of memory allocated.

The MongoDB ODBC Driver

I sometimes receive the following error: “Error creating temporary swap file name.”

In some cases, the driver must cache data from tables locally before it can create the final result set. This can occur when the driver needs to perform large, complex operations, such an ORDER BY, GROUP BY, DISTINCT or JOIN, on the client side. In these cases, the driver will use memory up to a certain threshold and then start spilling excess data over to disk. If there is a lot of data, then these “swap files” may become very large and the driver may run out of room on the local hard drive. Try to free up space on your hard drive and try again

If you are unable to free additional space on your main drive, you can specify an alternate location for the swap by doing the following:

  • On Windows, open Regedit and navigate to HKLM\SOFTWARE\Simba\Simba MongoDB ODBC Driver\Driver (HKLM\SOFTWARE\Wow6432Node\Simba\Simba MongoDB ODBC Driver\Driver for a 32-bit driver on 64-bit Windows), and create a string value called SwapFilePath and enter a directory that the driver should create swap files in.
  • On non-Windows platforms, open the .simba.mongodbodbc.ini file and create a SwapFilePath entry with a value equal to the driver the driver should create swap files in.

If I install the driver on Linux, are any extra libraries required?

Yes, you need a driver manager, such as unixODBC or iODBC. You also need the following libsasl libraries: cyrus-sasl-2.1.22-7 or later, cyrus-sasl-gssapi-2.1.22-7 or later, cyrus-sasl-plain-2.1.22-7 or later.


General FAQ for all drivers

Licensing


Where is my license file?

It is sent in a separate email when you download the driver. Please check your junk folder as strict filters may incorrectly mark the license email as spam

How do I install my license file?

License location is product and platform specific, but generally, the license file should be placed in the same folder where the driver files (.dll, .so, .dylib or .jar) are located. Detailed instructions on how to install the license are provided in the email with which you received the license file and in the User Guides.

I get the following error when I attempt to connect, how do I fix it?

The license file “<…snip…>” could not be found. Please contact your administrator or Simba Technologies Inc. at sales@simba.com.

The customer should find their license file in their email and place it in the location indicated in the error message.

I get an error when trying to copy the license file from Outlook to my Program Files directory.

This is due to Windows permissions, you must first copy it to your desktop and then into your Program Files directory.

Can I use a license file for one platform on another platform?

No, licenses are specific to platform, but not bitness.

Can I use a license file for one bitness with the other bitness?

Yes, licenses are specific to platform, but not bitness.

Do I need to have a copy of the license file with both the 32 and 64-bit driver, or just one?

Yes, the license file needs to be present for each driver and bitness you use.

General ODBC


I cannot see the DSN I’ve created in my application

This is usually due to a mismatch in bitness between the application and driver. The driver bitness (32 or 64-bit) must match the application bitness. Please see the Bitness section for more information.

I cannot see the driver I've installed in the ODBC Administrator.

This is usually because the wrong bitness of ODBC Administrator is being used, please see https://cdn.simba.com/wp-content/uploads/2010/10/HOW-TO-32-bit-vs-64-bit-ODBC-Data-Source-Administrator.pdf for how to access the correct one.

ERROR: Data source name not found and no default driver specified

If you can see your DSN in the ODBC Administrator, but your application reports this error, then most likely you created a User DSN and the application or the data access process runs under a different user account. If this is the case, then the application/process will not be able to detect the User DSN. Using a System DSN may resolve this issue since they are accessible by all processes running on the local machine. If the error persists with the System DSN, it is possible that the application or process trying to load the driver has a different bitness than the driver. See the previous answer to correct this problem.

I get the following error when I try and connect: “The specified DSN contains an architecture mismatch between the Driver and Application.”

This is due to a mismatch in bitness between the application and driver. The driver bitness (32 or 64-bit) must match the application bitness. Please see the Bitness section for more information.

Where is the driver installed?

The ODBC driver must be installed on the same machine that the application is running on. If using a desktop application like Excel, then it must be installed on the desktop. If using a server application like Tableau Server, it must be installed on the server machine.

What format do dates use?

YYYY-MM-DD

How do I enable logging in the driver?

On Windows, open ODBC Administrator, go to the System DSN tab, select your DSN and hit Configure. Then Click the Logging Options button, add your logging settings and click OK and OK to save the settings. Restart the application you are using the driver with for changes to take effect.

In OSX or Linux platforms, you must modify the simba.<driverName>odbc.ini file. For example, for Salesforce, this is simba.salesforceodbc.ini. The default location for this file is INSTALL_DIR/lib/<bitness>. Add the following under [Driver]. 6 is the highest log level(Trace). Restart the application you are using the driver with for changes to take effect.

LogLevel=6

LogPath=/path/to/logs

For a step by step guide visit How do I enable logging in an ODBC driver?

Or for more information, see the install guide for your driver.

How do I enable logging in the driver manager?

For Windows: Open ODBC Administrator, go to the Tracing tab then provide a Log File Path, including file name. Click Start Tracing Now, then open your application. Click Stop Tracing now to finish.

OSX and Linux:

iODBC – in your odbc.ini file add the following:

[ODBC]

Trace=1

TraceFilePath=/path/tofile/tracefile.log

Debug=1

DebugFilePath=/path/tofile/debugfile.log

unixODBC – in your odbcinst.ini file add the following:

Trace=yes

TraceFilePath=/path/tofile/tracefile.log

See this blog post for more information.

What format do times use?

hh:mm:ss

What format do timestamps use?

YYYY-MM-DD hh:mm:ss[.fffffffff]

I get the following error: (Simba)(ODBC)(11560) Unable to locate SQLGetPrivateProfileString function

This is due to not setting the ODBCInstLib in the .simba.<driverName>odbc.ini correctly. Please refer to the .ini file and uncomment the correct ODBCInstLib line as indicated by the comments to match the driver manager that you are using.

How can I test connectivity on non-Windows platforms?

When using iODBC as the driver manager you can use the iodbctest application provided as part of iODBC.

When using unixODBC as the driver manager you can use the isql application provided as part of unixODBC.

Are parameters supported?

Yes, parameters are supported for all drivers. Note that the syntax for parameters follows ODBC, and you use the ? as a parameter marker. For example: “SELECT * FROM T1 WHERE C1 = ?”

Bitness Specific


Do I need to use a 64-bit driver on a 64-bit OS?

No, virtually every 64-bit OS can run 32-bit programs. Instead, you should match the bitness of the driver to the bitness of the application you wish to use the driver with.

How can I tell the bitness of my application (in general)?

On Windows 64-bit, open the Task Manager and go to the Processes tab. Locate the name of the application that is running, and if it has a “*32″ beside the name then it is a 32-bit application.

How can I tell the bitness of Excel?

Excel 2007 and earlier are all 32-bit.

Excel 2010: Click the File tab and then click Help in the left navigation pane. The bitness will show up at the end of the version number.

Excel 2013: Click the File tab and then click Account in the left navigation pane, then click the About Excel button. The bitness will show up at the end of the version number.

How can I tell the bitness of PowerBI

Expand the main PowerBI ribbon and open the Help section. Clicking on the About item will open a Dialog containing version information including bitness.

How can I tell the bitness of QlikSense

QlikSense normally installs as a 64-bit application when downloaded from the website, however, its bitness isn’t really relevant, as QlikSense will allow you to connect to either 32 or 64-bit DSNs.

How can I tell the bitness of Tableau?

Tablea 8.0 and earlier are all 32-bit.

Tableau 8.1 and later: Click the Help menu item, then click About Tableau. The bitness will show in the top right hand corner of the dialog.

Tableau Specific

Will my generic ODBC driver work with Tableau on a Mac?

No, Tableau does not currently support generic ODBC connections on Mac. Please see: http://kb.tableau.com/articles/issue/generic-odbc-data-connection-unavailable-on-the-mac.

Linked Server


Insert, Update, and Delete fail with an error saying the Linked Server doesn’t support the required transaction interfaces.

Linked Server does not use ODBC natively, it uses OLE DB and to talk to ODBC it uses the Microsoft OLE DB to ODBC bridge. This is where the problem arises. You can work around this by disabling transactions for DML queries with the provider. Delete the linked server connection to MongoDB, then open the Linked Server Providers and right click on the MDASQL one. Select the “Non-transacted updates” and then recreate the linked server and try again.

Why do I get an error about unsupported conversions?

Because Linked Server uses the OLE DB to ODBC bridge, conversions are dependant on the bridge. This bridge does not support conversions when character columns have more than 8000 characters, so limiting the size of columns to 8000 characters allows this to work. Some drivers have configurable character lengths, so setting this will fix the error. In other cases, simply omitting the column will also resolve the issue

Why does TOP not work when querying the Linked Server directly?

This is a known bug and has been resolved. If the driver you are using has this problem, contact Simba to obtain the latest version of the driver.

How do I set up a Linked Server?

Please refer to the Quickstart guide that comes with the driver for information on how to create a Linked Server, or contact Simba to obtain the latest information