I'm having some trouble getting my C# app connected to my MongoDB on Atlas. The documentation on the website wants me to do this:
using MongoDB.Bson;
using MongoDB.Driver;
// Replace the uri string with your MongoDB deployment's connection string.
var client = new MongoClient(
"mongodb+srv://<username>:<password>#<cluster-address>/test?w=majority"
);
var database = client.GetDatabase("test");
But the drivers I downloaded (version 2.13) dont seem to have the GetDatabase function in the MongoClient namespace. Doing some digging I found a code snippet that seems to indicate that GetDatabase was depreciated in lieu of just using MongoClient. I just wanted to know if that was correct or if I had some bad drivers. Thanks in advance!
Related
I'm trying to make a functional basic Azure Cosmos Database workflow.
From my Azure account, I'm getting the endpoint address from the HOST param in the "Connection String" in "Settings", and the key from the "PRIMARY PASSWORD" param.
string EndpointUri = "https://<my-database-name>.mongo.cosmos.azure.com";
string PrimaryKey ="<my-key>";
then I try to create the client (following these instructions):
CosmosClient cosmosClient = new(
uri,
key,
new CosmosClientOptions(){
ApplicationRegion = Regions.WestUS
}
);
database = cosmosClient.CreateDatabaseIfNotExistsAsync(id: databaseId).Result;
But I keep getting and error
The remote name could not be resolved
Am I using the Endpoint and Key wrong...?
I guess you are using the Mongo API and using the SQL .Net SDK against it,
Here is the example to connect with Mongo API using the driver.
var client = new MongoClient(Environment.GetEnvironmentVariable("MONGO_CONNECTION"));
You've mixed-n-matched protocols. Every instance of Cosmos DB has an associated protocol (SQL API, MongoDB API, etc). Your example shows you chose the MongoDB API (which has a MongoDB endpoint) with the Cosmos DB API's SDK (and that won't work). Note: When I mentioned instance of Cosmos DB, I mean a complete namespace (which you created), and that namespace encapsulates all of your databases and related containers, permissions, etc.
When using the MongoDB API, you need to use standard MongoDB SDKs (provided by MongoDB or by the community), and then code against it just as you would code against native MongoDB databases.
The only protocol that uses the Cosmos DB SDK is the native SQL API (which is the SDK referenced in the code in your question).
If you really wanted to use different protocols (e.g. some Cosmos DB native containers, some MongoDB containers, some Cassandra keyspaces...), you'd need to create individual instances of Cosmos DB (three instances, in this case).
Am I using the Endpoint and Key wrong...?
Yes. You are using the Endpoint incorrectly.
The endpoint should be https://<account-name>.documents.azure.com.
I'm looking for a solution or at least some advice on how to build a function app in c# allowing to backup a tabular database hosted on an SSAS Azure Instance using the REST API. Idea is to backup it on an azure storage.
I've seen several code for SQL but I don't find any relevant documentation or sample.
Thanks for your help,
Miguel
At this moment I've start with this but I've got errors
string ConnectionString = "Provider = MSOLAP; Data Source = asazure://northeurope.asazure.wxxxxxxxxxxxxxxxx";
//
// The using syntax ensures the correct use of the
// Microsoft.AnalysisServices.Tabular.Server object.
//
using (Server server = new Server())
{
server.Connect(ConnectionString); }
I want to add an option to save data locally in my application using the mongo databse tools, I want to configure all the server information from within my application.
I have 2 questions.
the following code is working only after manual setup of mongodb localhost database in this way:
but on A computer that didn't configure the database setting, the code will not work.
my code is :
public void createDB()
{
MongoClient client = new MongoClient();
var db = client.GetDatabase("TVDB");
var coll = db.GetCollection<Media>("Movies");
Media video = new Media("", "");
video.Name = "split";
coll.InsertOne(video);
}
this code works only after manual set the database like the picture above.
without it I get in the last line A timeout exception.
how can I configure it from my application to make it work (define Server) ?
Is the user will be must install MongoDB software on his PC, or the API Package is enough in order to use the database?
Many Thanks!
By using that command you're not "configuring the database", you're running it.
If you don't want to manually run it, but want it to be always running, you should install it as a Windows Service as explained in How to run MongoDB as Windows service?.
You need to install and/or run a MongoDB server in order to use it. Using the API alone is not enough, it's not like SQLite.
The Code you are using will search for local mongodb.
I am using Azure cosmos dB Emulator to do CRUD operations on MongoDB using MongoDB C# Drivers.
I am able to create DB and collection using C# in emulator. This is my sample code to create DB and Collection..
IMongoDatabase db = dbClient.GetDatabase("<My DB name>");
db.CreateCollection("<Collection Name>");
These queries are working fine but when I am trying to insert sample data into this collection its throwing below error
Command insert failed: Unknown server error occurred when processing this request..
My sample code to insert sample data is
IMongoCollection<UserProfile> collection = db.GetCollection<UserProfile("<Collection Name>");
UserProfile c = new UserProfile();
c.ID = 21;
c.UserName = "<Some Name> ";
c.Email = "<Email ID>";
collection.InsertOne(c);
How to use MongoDB C# Drivers to do CRUD operations in Azure cosmos dB Emulator And how to run mongo queries in Emulator instead of SQL queries?
Thanks in Advance
The UI for MongoDB API in Emulator is not yet implemented (it's coming though), but everything else should work. There are two tutorials you need to combine for your use case:
https://learn.microsoft.com/en-us/azure/cosmos-db/local-emulator
(look for MongoDB section there)
https://learn.microsoft.com/en-us/azure/cosmos-db/create-mongodb-dotnet
- build, run and make sure it works new connection string for emulator and then just inject your code, it will work.
As per title, I would like to request a calculation to a Spark cluster (local/HDInsight in Azure) and get the results back from a C# application.
I acknowledged the existence of Livy which I understand is a REST API application sitting on top of Spark to query it, and I have not found a standard C# API package. Is this the right tool for the job? Is it just missing a well known C# API?
The Spark cluster needs to access Azure Cosmos DB, therefore I need to be able to submit a job including the connector jar library (or its path on the cluster driver) in order for Spark to read data from Cosmos.
As a .NET Spark connector to query data did not seem to exist I wrote one
https://github.com/UnoSD/SparkSharp
It is just a quick implementation, but it does have also a way of querying Cosmos DB using Spark SQL
It's just a C# client for Livy but it should be more than enough.
using (var client = new HdInsightClient("clusterName", "admin", "password"))
using (var session = await client.CreateSessionAsync(config))
{
var sum = await session.ExecuteStatementAsync<int>("val res = 1 + 1\nprintln(res)");
const string sql = "SELECT id, SUM(json.total) AS total FROM cosmos GROUP BY id";
var cosmos = await session.ExecuteCosmosDbSparkSqlQueryAsync<IEnumerable<Result>>
(
"cosmosName",
"cosmosKey",
"cosmosDatabase",
"cosmosCollection",
"cosmosPreferredRegions",
sql
);
}
If your just looking for a way to query your spark cluster using SparkSql then this is a way to do it from C#:
https://github.com/Azure-Samples/hdinsight-dotnet-odbc-spark-sql/blob/master/Program.cs
The console app requires an ODBC driver installed. You can find that here:
https://www.microsoft.com/en-us/download/details.aspx?id=49883
Also the console app has a bug: add this line to the code after the part where the connection string is generated.
Immediately after this line:
connectionString = GetDefaultConnectionString();
Add this line
connectionString = connectionString + "DSN=Sample Microsoft Spark DSN";
If you change the name of the DSN when you install the spark ODBC Driver you will need to change the name in the above line then.
Since you need to access data from Cosmos DB, you could open a Jupyter Notebook on your cluster and ingest data into spark (create a permanent table of your data there) and then use this console app/your c# app to query that data.
If you have a spark job written in scala/python and need to submit it from a C# app then I guess LIVY is the best way to go. I am unsure if Mobius supports that.
Microsoft just released a dataframe based .NET support for Apache Spark via the .NET Foundation OSS. See http://dot.net/spark and http://github.com/dotnet/spark for more details. It is now available in HDInsight per default if you select the correct HDP/Spark version (currently 3.6 and 2.3, soon others as well).
UPDATE:
Long ago I said a clear no to this question.
However times has changed and Microsoft made an effort.
Pleas check out https://dotnet.microsoft.com/apps/data/spark
https://github.com/dotnet/spark
// Create a Spark session
var spark = SparkSession
.Builder()
.AppName("word_count_sample")
.GetOrCreate();
Writing spark applications in C# now is that easy!
OUTDATED:
No, C# is not the tool you should choose if you would like to work with Spark! However if you really want to do the job with it try as mentioned above Mobius
https://github.com/Microsoft/Mobius
Spark has 4 main languages and API-s for them: Scala, Java, Python, R.
If you are looking for a language in production I would not suggest the R API. The Other 3 work well.
For Cosmo DB connection I would suggest: https://github.com/Azure/azure-cosmosdb-spark