Ⅰ Quicksql——更简单,更安全,更快速的跨数据源统一SQL查询引擎
SQL,全称Structured Query Language,是当今使用最广泛的数据查询语言。最初的设计仅仅是适用于RDBMS,可是随着数据底层存储结构设计的大爆发,越来越多的数据存储引擎支持SQL查询。甚至于支持SQL查询几乎可以定义为这个数据存储引擎能否广泛应用于生产环境的一种标准,最典型的案例就是Hive。Elasticsearch和Druid虽然原生不支持,但从官网发布的消息来看,SQL支持正在计划中。
只可惜ANSI针对SQL仅仅是提供了一种标准,数据存储引擎均在此基础上做了不同的发展演化。发展至今,不同引擎的SQL差异化愈发明显,数据分析人员必须学习使用不同的SQL语言来适应不同的数据存储生产环境,这本身就违背了SQL设计的初衷。另一方面来说,不同数据存储引擎间因数据结构的差异,不能将数据放在一起进行计算 探索 ,这也极大的限制了数据分析人员的分析成果可能性。
于是,Quicksql(简称QSQL)诞生啦!
上面四张图展示了 QuickSQL 统一查询的性能比较,由于 QuickSQL 会牺牲一次解析的时间辅助查询,所以在 MySQL 和 Elasticsearch 的查询中会慢 0.5 s,在 Hive 查询中由于底层使用了 Spark-Hive 作引擎,因此性能会稍优于 Hive 原生查询。
最后一张图展示了在混查场景下的性能比较,可以看到在处理 MySQL 和 Elasticsearch 的关联查询时,由于数据源自身具备索引,QuickSQL 能够充分利用数据源本身的能力实现下推执行,性能会远远优于 Hive 数据源与其他数据源在同等规模数据下关联的性能。
Ⅱ 同数据源,并行方式提交的sql查询语句,数据库中是并行执行这些sql语句,还是以队列的方式执行的
你可以写三个需要运行时行很长的sql语句,中间不用go分隔,就是你要的现象了,我试过,是一齐运行的。
Ⅲ sql 登陆不了 数据源运行程序的问题
从连接方式上,你使用了ODBC数据源的方式登录,具体为在你的程序中,数据库连接字符串里边只是写了“DSN=<ODBC数据源名称>”之类的一堆东西,那你应该到“控制面板”->“管理工具”->“数据源(ODBC)”里看看设置,里边的每个数据源都是设置了帐号密码,不是数据库自己的帐号密码就是WINDOWS的帐号密码。我估计你的情况就是后者。
Ⅳ sql语句能不能作为查询的数据源
sql语句能作为查询的数据源。一个查询可以作为另一个查询的数据源,而且是必须的,这是编写sql语句时常用到的手段之一,否则sql查询解决问题的能力会被大打折扣,这样的数据库管理系统是不会有市场的。可以这样说市面上流行的数据库管理系统都支持将一个查询作为另一个查询的数据源。
Ⅳ spark3.0.0版本中sparksql中创建dataframe和执行sql的入口是
在Spark SQL中SparkSession是创建DataFrame和执行SQL的入口,创建DataFrame有三种方式:通过Spark的数据源进行创建;从一个存在的RDD进行转换;还可以从Hive Table进行查询返回。
1)从Spark数据源进行创建
(1)查看Spark数据源进行创建的文件格式
scala> spark.read.
csv format jdbc json load option options orc parquet schema table text textFile
(2)读取json文件创建DataFrame
scala> val df = spark.read.json(“/opt/mole/spark/examples/src/main/resources/people.json”)
df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]
(3)展示结果
2)从RDD进行转换
3)从Hive Table进行查询返回。
Ⅵ 远程连接SQL数据源
// S6_1Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "S6_1.h"
#include "S6_1Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CS6_1Dlg 对话框
CS6_1Dlg::CS6_1Dlg(CWnd* pParent /*=NULL*/)
: CDialog(CS6_1Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//初始化数据库操作
ifbegin=TRUE;//第一次打开
CString m_dbstr,m_errmsg,m_SQLstr;
m_dbstr.Format("DSN=%s;UID=%s;PWD=%s","SampleDB","","");//数据库名称,用户,口令
TRY{
if(m_db.IsOpen())
m_db.Close();
m_db.OpenEx(m_dbstr);//通过ODBC来打开数据库
m_record=new CRecordset(&m_db);
m_SQLstr="select * from CustomerTable;";//准备要执行的SQL语句
if(m_record->IsOpen())
m_record->Close();
m_record->Open(CRecordset::dynaset,m_SQLstr);//执行SQL语句,得到记录集
if(m_record->IsBOF())
AfxMessageBox("NO RECORD IN TABLE");//报告记录集是否为空
}
CATCH_ALL(e){
e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
AfxMessageBox(m_errmsg);
return;
}
END_CATCH_ALL
}
void CS6_1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_userID);
DDX_Control(pDX, IDC_EDIT2, m_pwd);
DDX_Control(pDX, IDC_EDIT3, m_sex);
DDX_Control(pDX, IDC_EDIT4, m_old);
DDX_Control(pDX, IDC_EDIT5, m_Email);
DDX_Control(pDX, IDC_BUTTON1, m_button1);
DDX_Control(pDX, IDC_BUTTON2, m_button2);
}
BEGIN_MESSAGE_MAP(CS6_1Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedButton2)
ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()
// CS6_1Dlg 消息处理程序
BOOL CS6_1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将\“关于...\”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO:在此添加额外的初始化代码
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CS6_1Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CS6_1Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
HCURSOR CS6_1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CS6_1Dlg::OnBnClickedButton1()//查询下一条记录
{
// TODO:在此添加控件通知处理程序代码
CString m_errmsg;
CDBVariant m_value;//存放记录中的字段值
TRY{
if(ifbegin)
{
m_record->MoveFirst();
ifbegin=FALSE;
}
else
m_record->MoveNext();//移向下一条记录
if(!m_record->IsEOF())
{
m_record->GetFieldValue("UserID",m_value);
m_userID.SetWindowText(*m_value.m_pstring);//得到userID
m_record->GetFieldValue("UserPassword",m_value);
m_pwd.SetWindowText(*m_value.m_pstring);//得到密码
m_record->GetFieldValue("Sex",m_value);
m_sex.SetWindowText(*m_value.m_pstring);//得到用户的性别
m_record->GetFieldValue("Old",m_value);
CString str;
str.Format("%d",m_value.m_iVal);
m_old.SetWindowText(str);//得到用户的年龄
m_record->GetFieldValue("Email",m_value);
m_Email.SetWindowText(*m_value.m_pstring);//得到用户的电子邮件地址
}
else
{
AfxMessageBox("已经到达记录集尾,单击‘清除’按钮可以返回记录集顶端");
m_button1.EnableWindow(FALSE);//禁止再继续查询
}
}
CATCH_ALL(e){
e->GetErrorMessage(m_errmsg.GetBuffer(128),128);
AfxMessageBox(m_errmsg);
return;
}
END_CATCH_ALL
}
void CS6_1Dlg::OnBnClickedButton2()//清空编辑控件中的数据
{
// TODO:在此添加控件通知处理程序代码
m_Email.SetWindowText("");
m_userID.SetWindowText("");
m_old.SetWindowText("");
m_pwd.SetWindowText("");
m_sex.SetWindowText("");
ifbegin=TRUE;//将数据库重新置成新打开的状态
m_button1.EnableWindow(TRUE);//允许重新开始查看记录
}
void CS6_1Dlg::OnBnClickedCancel()
{
// TODO: 在此添加控件通知处理程序代码
OnCancel();
}
Ⅶ 数据源如果为sql
1、进入数据源管理页面。
2、在数据源管理页面,单击右上角的新增数据源。
3、在新增数据源对话框中,选择数据源类型为SQLServer。
4、在新增SQLServer数据源对话框中,配置各项参数。
5、以新增SQLServer>连接串模式类型的数据源为例。
6、选择资源组连通性类型为数据集成。
7、在资源组列表,单击相应资源组后的测试连通性。
8、测试连通性通过后,单击完成。
Ⅷ VC中如何执行SQL语句(用SQLServer的数据源)
使用 ADODB.Command 来调用存储过程,如:
Dim adoComm As Object
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
'// 设置连接,假设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
'// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
'// 存储过程名称
.CommandText = "你的存储过程名称"
'// 设置输入参数
.Parameters.Item("@输入参数").Value = "值"
'// 执行存储过程
.Execute
If .Parameters.Item("@返回参数名称").Value = True Then
Else
End If
End With
'// 释放对象
Set adoComm = Nothing
Ⅸ c#访问数据库用的是什么协议
ado.net协议
Connection对象:与数据源建立连接,连接sql server7.0 或更新版本数据库用SqlConnection,连接OLEDB数据源使用OledbConnection.
Command 对象:对数据源执行SQL命令并返回结果,SQL Server7.0或更新版本用SqlCommand,OLE DB数据源使用OledbCommand.
DataReader对象: 读取数据源的数据,只能将数据源的数据从头到尾依次读出,Sql server7.0或以上版本使用SqlDataReader,Oledb数据源使用OledbReader
DataAdapter对象:对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet ,或根据DataSet中的数据必定数据源。Sql server7.0或以上版本使用SqlDataAdapter,Oledb 数据源使用OledbAdpater.
DataSet对象: 服务器内存中的数据库
DataView对象: 用于显示DataSet中的数据