找回密码
 立即注册

QQ登录

只需一步,快速开始

Pirit_Xu
金牌服务用户   /  发表于:2024-9-19 17:48  /   查看:816  /  回复:19
1金币

你好,

我需要用业务数据库与ES数据库的数据进行join,需要通过时间范围传参保证数据量可控
单独使用ES数据集或Mysq数据集功能都正常,但两个数据集join后(4种join都试过了),只要时间范围内有一个数据集没有数据,系统就会报错,而且无法保存

客户现在急需看到该报表,还请尽快帮忙排查一下

感谢

详情请查看附件视频

log-20240919094640.zip

337.55 KB, 下载次数: 32

创建数据集 - 威卡威商业智能 - Google Chrome 2024-09-19 17-39-03.zip

6.23 MB, 下载次数: 26

最佳答案

查看完整内容

好的我们在继续看一下。 您的过滤人条件是在 filter 中写的。 您在must中来指定index试试,如下: { "query": { "bool": { "must": [ { "match": { "_index": "javen_test" } } } } }

19 个回复

倒序浏览
最佳答案
最佳答案
Eden.SunWyn认证
超级版主   /  发表于:2024-9-19 17:48:24
来自 16#
本帖最后由 Eden.Sun 于 2024-9-26 16:27 编辑
Pirit_Xu 发表于 2024-9-26 16:21
葡萄城:ElasticSearchDSL;   
ES版本:7.10.2

好的我们在继续看一下。


您的过滤人条件是在 filter 中写的。

您在must中来指定index试试,如下:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "_index": "javen_test"
          }
        }

    }
  }
}
回复 使用道具 举报
lucas.Yan
超级版主   /  发表于:2024-9-19 18:24:45
2#
看您的视频后,感觉您是通过自定义表写的sql然后利用参数添加的筛选和查询,当某个查询的结果为空的时候,此时使用join链接会报错。
可以提供一下您的数据集文件吗?我们需要更多的信息来判断如何解决这样的问题。

回复 使用道具 举报
Pirit_Xu
金牌服务用户   /  发表于:2024-9-19 19:02:56
3#
lucas.Yan 发表于 2024-9-19 18:24
看您的视频后,感觉您是通过自定义表写的sql然后利用参数添加的筛选和查询,当某个查询的结果为空的时候, ...

还是造一下数据吧  两个数据集中字段join一下,比如Mysql中 snCode,startTime, endTime; ES中 snCode,eventTime,result; 用snCode join,使用时间过滤
回复 使用道具 举报
lucas.Yan
超级版主   /  发表于:2024-9-20 09:53:44
4#
早上好,我在本地自己构建了一个测试环境,使用sql和参数配合进行时间的筛选,然而并没有复现出报错的问题。如果您的数据量不是很大,可以尝试不在sql中进行过滤。转而使用数据集的数据过滤器功能。

image.png820357055.png
您尝试一下上面这种方式。



回复 使用道具 举报
Pirit_Xu
金牌服务用户   /  发表于:2024-9-24 15:50:18
5#
补充一下后台报错信息,麻烦帮忙看看,很不稳定

2024-09-24 07:47:51.144+00:00 [ERR] 0HN6SD573TH2R:00000008 Grapecity.Enterprise.Reporting.Plugin.V2.Controllers.ReportsController Failed to get report parameters values. Error: An error occurred during report fail check procedure: Specified data inaccessible: Server inner error on dataset executor. Exception detail:Meta:_gcErrorCode=E_80029;
_gcErrorCategory=SqlExecutor;

GrapeCity.Data.DataSource.Common.Abstraction.Exceptions.GcException: Internal executor error. Method or code should not be reached.
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.<ParseBooleanExpression>b__9_3(ColumnIdentity ci)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.ExecuteContext`1.ExecuteColumnExpContext.MakeFunc()
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.ParseBooleanExpression(IExpression expression, JoinConstraintOptimizationResult result)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.JoinConstraintOptimizer.Optimize(IExpression expression)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.CompilerCore.JoinCore[TLeftTable,TLeftTableRow,TLeftTableColumn,TRightTable,TRightTableRow,TRightTableColumn,TResultTable,TResultTableRow,TResultTableColumn](TLeftTable leftTableContext, TRightTable rightTableContext, JoinType joinType, IExpression joinConstraint, Func`3 columnCombinator, Func`3 rowCombinator, Func`4 resultTableConstructor, GlobalExecuteContext globalExecuteContext)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.Core.CompositeTable.Join(TableContext secondTable, JoinType joinType, IExpression joinConstraint, GlobalExecuteContext globalExecuteContext)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteStatementBody(SelectStatement statement, String alias, GlobalExecuteContext globalExecuteContext, Boolean ignoreOrderBy)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteStatement(SelectStatement statement, String alias, GlobalExecuteContext globalExecuteContext)
   at GrapeCity.Enterprise.Data.DataSource.Common.SqlExecutor.MemorySqlExecutor.ExecuteImpl(SelectStatement selectStatement, GlobalExecuteContext globalExecuteContext)
   at GrapeCity.Enterprise.Data.DatasetManager.GcefModelQuery.ExecuteAsync(Dictionary`2 connectionStringModel, DataSetDocument datasetDoc, Dictionary`2 runtimeParamValues, Dictionary`2 procedureParametersDic, Boolean isValidationMode, Int32 rowLimit)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GCEFModelQuery(GcefQueryParameter queryArgument, Dictionary`2 nonFixedParams, Boolean isValidationMode, Boolean enableRowLimit, Int32 rowLimit)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GetTableContextAsync(GcefQueryParameter queryArgument, Boolean enableRowLimit, Int32 rowLimit, Boolean isValidationMode, String customSQL)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.GetTableContextWithoutCalcAndCatFieldsAsync(GcefQueryParameter queryArgument, Boolean enableRowLimit, Int32 rowLimit, Boolean isValidationMode)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataImplAsync(GcefQueryParameter queryArgument, Int32 rowLimit, Boolean indexMode, Boolean isValidationMode, String customSQL)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataAsync(GcefQueryParameter parameter, Nullable`1 rowLimit, Boolean isValidationMode, String customSQL)
   at GrapeCity.Enterprise.Data.DatasetManager.DatasetManager.QueryDataWithViewAsync(GcefQueryParameter parameter, IViewInfo view, Nullable`1 rowLimit, String customSQL)
   at GrapeCity.Enterprise.Server.Dataset.DatasetController.GetNormalDatasetStreamDataResultAsync(DataSetDocument datasetDoc, Dictionary`2 datasourceDocDict, Dictionary`2 runtimeParameters, List`1 requiredParameters, IDatasetManager datasetManager, Int32 previewRows, ILogger`1 logger, IDatasetViewCalculator datasetViewCalculator)
   at GrapeCity.Enterprise.Server.Dataset.DatasetController.QueryDatasetData(DataSet model, IExecuteSession executeSession, IDatasetManager datasetManager, IStreamingDatasetService streamingDatasetService, IDatabaseOperationService databaseOperationService, IPushDatasetDatabaseAdapter pushDatasetDatabaseAdapter, INativeQueryDatasetService nativeQueryDatasetService, IDatasetViewCalculator datasetViewCalculator, ILogger`1 logger, ILoggerFactory loggerFactory).
2024-09-24 07:47:51.145+00:00 [INF] 0HN6SD573TH2R:00000008 Serilog.AspNetCore.RequestLoggingMiddleware Request finished HTTP/1.1 POST /api/v2.0/reporting/reports/077a9cea-13e8-4039-91b1-2e179f68986c/render-parameters-values - 400 application/json; charset=utf-8 364.1526 ms
2024-09-24 07:47:58.382+00:00 [INF]  Grapecity.Enterprise.Scheduler.Schedule.Actors.ProxyDispatchActor task<51702419-cd32-449f-bc07-30e448b70c1e> get a available worker: [akka.tcp://ScheduleCluster@127.0.0.1:51990/user/schedule-proxy#847092613]
回复 使用道具 举报
Eden.SunWyn认证
超级版主   /  发表于:2024-9-24 17:25:14
6#
从您的日志和您这里的日志内容来看,是缺少字段:
image.png117374877.png

或者是没有拿到参数值:
image.png61149596.png


应该是您的数据集里面的表中的数据或者字段导致的。有可能是没有数据,有可能是直接字段都找不到了。
您可以对比一下出错和正常运行时两个子表各自的数据内容,排查一下这方面的问题。


回复 使用道具 举报
Pirit_Xu
金牌服务用户   /  发表于:2024-9-24 18:20:10
7#
添加参数过滤方式如图

image.png961388549.png

报错见视频附件,观察到ES只要没有数据就会报错,导致该报表没法提交给到客户

编辑数据集 - 威卡威商业智能 - Google Chrome 2024-09-24 18-14-49.zip

9.1 MB, 下载次数: 7

回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:2024-9-25 11:11:27
8#
您好,这个报错还是找不到指定列。
我们这边也做了测试,在查询为空的情况下,得到的结果如下:
image.png520589599.png


所以我们怀疑的是您的自定义table,也就是您左边的这个table,是写的自定义的sql。

是不是这个sql里面,在查询日期不同的时候,返回的列不一样。
最简单的就是您拿报错的时间,在一个数据库连接工具里面,查一下这个ES数据库,看一下他返回的数据表,是长什么样子的,有没有这个列
回复 使用道具 举报
Pirit_Xu
金牌服务用户   /  发表于:2024-9-26 12:49:04
9#
你好,目前分析下来,仅通过query语句中的term方式进行index匹配,在无数据的时候会出现全局检索导致字段错乱,无法满足使用,还请尽快提供index指定的功能增强对ES的支持  
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部