Unverified 提交 299addd4 authored 作者: XiaJunjie2020's avatar XiaJunjie2020 提交者: GitHub

Merge pull request #184 from dataease/pr@dev@feat_视图计算返回sql

feat: 视图返回sql
...@@ -19,4 +19,5 @@ public class ChartViewDTO extends ChartViewWithBLOBs { ...@@ -19,4 +19,5 @@ public class ChartViewDTO extends ChartViewWithBLOBs {
private Boolean isLeaf; private Boolean isLeaf;
private String pid; private String pid;
private String sql;
} }
...@@ -173,6 +173,7 @@ public class ChartViewService { ...@@ -173,6 +173,7 @@ public class ChartViewService {
throw new RuntimeException(Translator.get("i18n_dataset_delete")); throw new RuntimeException(Translator.get("i18n_dataset_delete"));
} }
// 判断连接方式,直连或者定时抽取 table.mode // 判断连接方式,直连或者定时抽取 table.mode
DatasourceRequest datasourceRequest = new DatasourceRequest();
List<String[]> data = new ArrayList<>(); List<String[]> data = new ArrayList<>();
if (table.getMode() == 0) {// 直连 if (table.getMode() == 0) {// 直连
Datasource ds = datasourceService.get(table.getDataSourceId()); Datasource ds = datasourceService.get(table.getDataSourceId());
...@@ -180,7 +181,6 @@ public class ChartViewService { ...@@ -180,7 +181,6 @@ public class ChartViewService {
throw new RuntimeException(Translator.get("i18n_datasource_delete")); throw new RuntimeException(Translator.get("i18n_datasource_delete"));
} }
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds); datasourceRequest.setDatasource(ds);
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class); DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(table.getInfo(), DataTableInfoDTO.class);
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
...@@ -201,20 +201,19 @@ public class ChartViewService { ...@@ -201,20 +201,19 @@ public class ChartViewService {
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
/** /**
* 直连不实用缓存 * 直连不实用缓存
String key = "provider_sql_"+datasourceRequest.getDatasource().getId() + "_" + datasourceRequest.getTable() + "_" +datasourceRequest.getQuery(); String key = "provider_sql_"+datasourceRequest.getDatasource().getId() + "_" + datasourceRequest.getTable() + "_" +datasourceRequest.getQuery();
Object cache; Object cache;
if ((cache = CacheUtils.get(JdbcConstants.JDBC_PROVIDER_KEY, key)) == null) { if ((cache = CacheUtils.get(JdbcConstants.JDBC_PROVIDER_KEY, key)) == null) {
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
CacheUtils.put(JdbcConstants.JDBC_PROVIDER_KEY,key ,data, null, null); CacheUtils.put(JdbcConstants.JDBC_PROVIDER_KEY,key ,data, null, null);
}else { }else {
data = (List<String[]>) cache; data = (List<String[]>) cache;
} }
*/ */
} else if (table.getMode() == 1) {// 抽取 } else if (table.getMode() == 1) {// 抽取
// 连接doris,构建doris数据源查询 // 连接doris,构建doris数据源查询
Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource");
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds); datasourceRequest.setDatasource(ds);
String tableName = "ds_" + table.getId().replaceAll("-", "_"); String tableName = "ds_" + table.getId().replaceAll("-", "_");
datasourceRequest.setTable(tableName); datasourceRequest.setTable(tableName);
...@@ -243,12 +242,12 @@ public class ChartViewService { ...@@ -243,12 +242,12 @@ public class ChartViewService {
// 仪表板有参数不实用缓存 // 仪表板有参数不实用缓存
if (CollectionUtils.isNotEmpty(requestList.getFilter())) { if (CollectionUtils.isNotEmpty(requestList.getFilter())) {
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
}else { } else {
try{ try {
data = cacheViewData(datasourceProvider, datasourceRequest, id); data = cacheViewData(datasourceProvider, datasourceRequest, id);
}catch (Exception e) { } catch (Exception e) {
LogUtil.error(e); LogUtil.error(e);
}finally { } finally {
// 如果当前对象被锁 且 当前线程冲入次数 > 0 则释放锁 // 如果当前对象被锁 且 当前线程冲入次数 > 0 则释放锁
if (lock.isLocked() && lock.getHoldCount() > 0) { if (lock.isLocked() && lock.getHoldCount() > 0) {
lock.unlock(); lock.unlock();
...@@ -320,40 +319,42 @@ public class ChartViewService { ...@@ -320,40 +319,42 @@ public class ChartViewService {
ChartViewDTO dto = new ChartViewDTO(); ChartViewDTO dto = new ChartViewDTO();
BeanUtils.copyBean(dto, view); BeanUtils.copyBean(dto, view);
dto.setData(map); dto.setData(map);
dto.setSql(datasourceRequest.getQuery());
return dto; return dto;
} }
/** /**
* 避免缓存击穿 * 避免缓存击穿
* 虽然流量不一定能够达到击穿的水平 * 虽然流量不一定能够达到击穿的水平
*
* @param datasourceProvider * @param datasourceProvider
* @param datasourceRequest * @param datasourceRequest
* @param viewId * @param viewId
* @return * @return
* @throws Exception * @throws Exception
*/ */
public List<String[]> cacheViewData(DatasourceProvider datasourceProvider, DatasourceRequest datasourceRequest, String viewId) throws Exception{ public List<String[]> cacheViewData(DatasourceProvider datasourceProvider, DatasourceRequest datasourceRequest, String viewId) throws Exception {
List<String[]> result ; List<String[]> result;
Object cache = CacheUtils.get(JdbcConstants.VIEW_CACHE_KEY, viewId); Object cache = CacheUtils.get(JdbcConstants.VIEW_CACHE_KEY, viewId);
if (cache == null) { if (cache == null) {
if (lock.tryLock()) {// 获取锁成功 if (lock.tryLock()) {// 获取锁成功
try{ try {
result = datasourceProvider.getData(datasourceRequest); result = datasourceProvider.getData(datasourceRequest);
if (result != null) { if (result != null) {
CacheUtils.put(JdbcConstants.VIEW_CACHE_KEY, viewId, result, null, null); CacheUtils.put(JdbcConstants.VIEW_CACHE_KEY, viewId, result, null, null);
} }
}catch (Exception e) { } catch (Exception e) {
LogUtil.error(e); LogUtil.error(e);
throw e; throw e;
}finally { } finally {
lock.unlock(); lock.unlock();
} }
}else {//获取锁失败 } else {//获取锁失败
Thread.sleep(100);//避免CAS自旋频率过大 占用cpu资源过高 Thread.sleep(100);//避免CAS自旋频率过大 占用cpu资源过高
result = cacheViewData(datasourceProvider, datasourceRequest, viewId); result = cacheViewData(datasourceProvider, datasourceRequest, viewId);
} }
}else { } else {
result = (List<String[]>)cache; result = (List<String[]>) cache;
} }
return result; return result;
} }
...@@ -402,11 +403,11 @@ public class ChartViewService { ...@@ -402,11 +403,11 @@ public class ChartViewService {
public String chartCopy(String id) { public String chartCopy(String id) {
String newChartId = UUID.randomUUID().toString(); String newChartId = UUID.randomUUID().toString();
extChartViewMapper.chartCopy(newChartId,id); extChartViewMapper.chartCopy(newChartId, id);
return newChartId; return newChartId;
} }
public String searchAdviceSceneId(String panelId){ public String searchAdviceSceneId(String panelId) {
return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(),panelId); return extChartViewMapper.searchAdviceSceneId(AuthUtils.getUser().getUserId().toString(), panelId);
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论