SQL Azure (18) 使用External Table实现垮库查询

简介:

 《Windows Azure Platform 系列文章目录

 

  问题

  1.我们在进行SQL Server开发的时候,经常会使用垮库查询。但是在默认情况下,使用Azure SQL Database不支持垮库查询。如下图:

  

  2.我们执行垮库查询语句,如下:

SELECT A.CustomerID,A.FirstName, A.LastName,B.OrderID FROM   CRMDB.dbo.CustomerInfo AS A LEFT JOIN OrderDB.dbo.OrderInfo AS B ON   A.CustomerID=B.CustomerID

 

  3.会出现以下的报错信息:

  

  4.可以看到,在默认情况下,使用Azure SQL Database不支持垮库查询。

 

  使用外部表:

  准备工作

  1.我们这里增加一些难度。我们在Azure SQL Database分别创建2个Server。如下图:

  

  注意,为了避免出现跨Azure数据中心之间的延时,请尽量在同一个数据中心创建Server。笔者在中国东部数据中心,创建2个Server

 

  2.我们在这2个Server下创建2个不同的Database,如下图:

 

  3.使用SSMS,连接到ew79sank1x.database.chinacloudapi.cn,1433,数据库CRMDB,创建表CustomerInfo

复制代码
create table dbo.CustomerInfo
(
    CustomerID nvarchar(100) not null primary key,
    FirstName nvarchar(100) not null,
    LastName nvarchar(100) not null
)
Go

insert into CustomerInfo(CustomerID,FirstName,LastName) values 
('001','Jason','Zhang'),
('002','Peter','Huang'),
('003','Jason','Hu'),
('004','Mike','Lee')
复制代码

 

  4.使用SSMS,连接到lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB,创建表OrderInfo

复制代码
create table dbo.OrderInfo
(
    OrderID nvarchar(100) not null,
    CustomerID nvarchar(100) not null,
)
Go

insert into OrderInfo(OrderID,CustomerID) values 
('2013010100001','001'),
('2013010100002','001'),
('2013010100003','002'),
('2013010100004','002'),
('2013010100005','002'),
('2013010100006','003'),
('2013010100007','004')
复制代码

 

  创建外部表

  1.使用SSMS,连接到ew79sank1x.database.chinacloudapi.cn,1433,数据库CRMDB。执行以下脚本

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>'; 
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred 
WITH IDENTITY = '<username>', 
SECRET = '<password>';  

  请注意:上面的<username>和<password>,是连接到lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB的用户名和密码。注意是连接到另外的Server和Databse,不是自己。

 

  2.执行以下命令

CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH 
    (TYPE = RDBMS, 
    LOCATION = 'lcqyvtqri1.database.chinacloudapi.cn', 
    DATABASE_NAME = 'OrderDB', 
    CREDENTIAL = ElasticDBQueryCred, 
) ;

  连接到lcqyvtqri1.database.chinacloudapi.cn,1433

 

  3.创建外部表

复制代码
CREATE EXTERNAL TABLE dbo.OrderInfo
(
    OrderID nvarchar(100) not null,
    CustomerID nvarchar(100) not null
)
WITH 
( DATA_SOURCE = MyElasticDBQueryDataSrc)
复制代码

  注意:上面创建的External Table的Table Name和Table Schema,必须与Azure SQL Database: lcqyvtqri1.database.chinacloudapi.cn,1433,数据库OrderDB中的表OrderInfo的Table Name和Table Schema一样。

 

  4.执行完毕后,我们可以在ew79sank1x.database.chinacloudapi.cn,1433,查看到原本保存在lcqyvtqri1.database.chinacloudapi.cn,1433的数据库OrderDB中的表dbo.OrderInfo。如下图:

 

  5.我们可以执行以下语句,查询dbo.OrdrInfo表的内容:

SELECT [OrderID],[CustomerID] FROM [dbo].[OrderInfo]

 

  

  执行结果,就是我们在lcqyvtqri1.database.chinacloudapi.cn,1433数据库OrderDB中的表dbo.OrderInfo的值

  

  6.执行查询语句:

SELECT A.CustomerID,A.FirstName, A.LastName,B.OrderID FROM dbo.CustomerInfo AS A LEFT JOIN dbo.OrderInfo AS B ON A.CustomerID=B.CustomerID

  如下图:

  

 

 

  参考资料:

https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-query-getting-started-vertical/



本文转自Lei Zhang博客园博客,原文链接:http://www.cnblogs.com/threestone/p/5552502.html,如需转载请自行联系原作者

目录
相关文章
|
1月前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
141 77
|
28天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
45 17
|
22天前
|
SQL Oracle 关系型数据库
如何在 Oracle 中配置和使用 SQL Profiles 来优化查询性能?
在 Oracle 数据库中,SQL Profiles 是优化查询性能的工具,通过提供额外统计信息帮助生成更有效的执行计划。配置和使用步骤包括:1. 启用自动 SQL 调优;2. 手动创建 SQL Profile,涉及收集、执行调优任务、查看报告及应用建议;3. 验证效果;4. 使用 `DBA_SQL_PROFILES` 视图管理 Profile。
|
29天前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
98 6
|
2月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
387 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
113 9
|
3月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
54 8
|
SQL 存储 索引