Is it possible to access SAS datasets from a SQL client? - sas

We have datasets that are created and stored in SAS. I'm curious if it is possible to access those datasets from a remote SQL client. Why? To make those datasets more broadly accessible within our organization.

Yes, you can license a product called SAS/SHARE that includes something called SHARE*NET. This is a very useful product that typically is installed in a BI server environment but I suppose it's possible to run on a local desktop.
Basically, you "register" SAS libraries to a service which then makes the data available to external clients over ODBC. This makes the data sets available as "tables" for applications like Excel, so I'm sure you can use other clients as well.
The SAS ODBC driver itself does not require a license, but the SAS/SHARE software does. I use it to make data available to many users who do not have direct access to my UNIX server.

It might be possible through SAS/ACCESS (or something similar), but SAS datasets typically cannot be understood by third-party software.

Related

Is Flight SQL similar to a library like turbodbc?

I was curious if Flight SQL will be an alternative to libraries like turbodbc? I am using turbodbc to query many different database flavors to return data in a pyarrow table, but I have had to add the OBDC drivers to my Docker image.
Is this something that can be used to query databases as a read-only user, or would something need to be done server side to support Flight SQL?
Flight SQL requires something database-side, yes. It's lower level than something like ODBC or JDBC, which (for instance) don't specify anything about the wire protocol; instead, it's a set of libraries intended to be used with a particular RPC protocol.
That said, it is intended to support use cases like yours. It's just that implementations are forthcoming (and things like Python bindings). Reaching out on the Arrow mailing list may get some more attention: dev#arrow.apache.org
UPDATE 2022/07: the more direct alternative to something like turbodbc, ODBC, JDBC, etc. in the Arrow ecosystem is under development as "ADBC": https://github.com/apache/arrow-adbc This is an API abstraction layer, so it doesn't require a remote server or local proxy, so long as you can somehow bend the database (client) to the proposed API.

SAS Data Sets on SharePoint

I'm an IT person supporting researchers who use SAS. We have recently migrated most users storage from on-premises SMB shares to MS Teams. The question has arisen whether it's possible to keep SAS Data Sets in Teams storage (Sharepoint library), then access them via the synced library.
Are there any pitfalls to this approach? Any steps that could/should be taken to ensure there are no problems?
It is possible, but not ideal. SAS 9.4 accesses data through a concept called a libname. A libname is a location where data that SAS can access is stored. SAS 9.4 stores data in .sas7bdat files, but it can also access a large variety of other databases natively.
If your users can set up Sharepoint as a shared network disk, SAS can work with it as if it is local. If not, your users will need to download the .sas7bdat files to their system locally, then re-upload it back to Sharepoint using the Sharepoint REST API. SAS can do this through code.
There really is no issue with it other than a convenience factor. It's not as ideal as a shared disk or database access, but it can work in theory.
If they decide to mount it as a network drive, I would add the caveat that they should not use Sharepoint as a place to store temporary data with high read/write speeds. In fact, I'd make it read-only to prevent them from doing so. If they need to pull the data locally then they can do so with libname access.

Am I forced to use Power BI Desktop to provide datasets to Power BI Service other than local or sharepoint files?

I'v been assigned the task to research Power BI Service platform to see if it is useful for the company I'm working at. I have a Power BI Pro license and basically my goal is to create several reports and dashboards from disparate data sources such as REST APIs, mongodb, SQL Server, csv and excel files.
I would like to create the mentioned datasets directly from the Power BI service website but I see that I only can create datasets from csv or excel files. And if I select SQL Server, it asks me to download Power BI Desktop client. The other type of data sources that I need are not even mentioned.
My question is if Power BI Desktop is required to develop and configure datasets for the Power BI service, because to begin with it is a windows only application.
Yes you are. The desktop version provides the full power of the software. You can learn a TON of things from this guy on YouTube and also from these guys in a cube. I'm willing to bet you can search the questions you have & can find specific example videos that'll help you determine if this software is right your company. In my opinion, when it comes to data visualization software, it's tough to beat Power BI. That's especially true if your company is on Office 365.
As a tip, it's important to note what kind of data sources you need to communicate with. And are those sources in a cloud or on premise. That's important depending on how "live" you want your data to be.
The main use of Power BI Desktop (Windows only application) is to get the data from the sources into data model, then load it to the service. The data connections and the ability to create reports is limited compared to the service. The main goal of the service is to share the reports and collaboration.
For example there is no realtionship designer in the service to connect the imported entities. You can create a report in the desktop and load it to the service, and then create other reports from its dataset in the service.
You can create dataflows in the service to get data from flat files, and databases, but you then use Desktop to connect to them and link them together there.

What are the alternatives for a multidatabase library for C/C++?

I want to write an application which should be able to connect to multiple databases (this will be configured by parameters at startup). The application will have different queries for each database engine, this is not a problem.
The problem is that I want to be able to connect to different database engines. Java has JDBC, Perl has DBI. What does C++ have?
What's more I don't want to use database drivers with too strict licences (commercial ones). GPL could be - but I'd like to avoid that.
Virtually every database engine in existence provides an ODBC interface. I think JDBC is actually a clone of ODBC.
What you want, then, is a C++ wrapper for the ODBC API, that implements RAII to make sure that database resources are released in case of exception, etc. For example: http://simpledb.sourceforge.net/
There is the older OLE connections. Using OLE, you could connect to a Flat File, Oracle, SQL, or MySql database provided you have the correct drivers installed.
ODBC is most compatible and most low-level. OLE DB is higher level and easier to work with, so if you find OLE DB provider for all your possible DB systems, it is the way to go. Otherwise ODBC is your option as virtually all DB systems support it.
EDIT: View this link: http://blogs.msdn.com/b/sqlnativeclient/archive/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access.aspx This makes ODBC the only proper choice. :)
The C++ object-relational mapping system ODB from the company Codesynthesis can be used by GPL version 2 software.
http://codesynthesis.com/products/odb/
Here is a blog entry where they describe why they chose to use native C APIs instead of ODBC to connect to the databases.
http://codesynthesis.com/~boris/blog/2011/12/09/oci-mingw/
Speed was one of the reasons.

using sql without any server

I have a question regarding SQL. Is there any way to connect to a database without a server into sql (no localhost or anything). I want to use SQL for a resource management in c++. I found the API but I need to know if that's possible, so I can use it like that.
Try SQLite.
SQLite is a sql-like database system that saves the database state to a single file somewhere on the file system, as opposed to requiring a full server. It does not have the full performance optimisations in SQL terms of full servers such as Postgres or MySQL; however, it does not require the overhead of a server.
Theres many options, one I know of is SQL Server Compact
Here's a link to microsoft's API for accessing SQL Server Compact via C++