go to post Benjamin De Boe · Sep 10, 2020 Hi Mohamed, there is no reason to start any new projects with InterSystems Caché. It's a platform that has proven itself for numerous years, but it's now being superseded by InterSystems IRIS, which builds on the same core strengths but has also been bolstered by pretty much all the new development at InterSystems over the past three years. This said, to complement Kevin's excellent list of links, you can also check out https://www.intersystems.com/try for a free trial hosted by us (so you won't need your cloud account just yet) and https://gettingstarted.intersystems.com/ with more entry-level documentation and tutorials. thanks,benjamin
go to post Benjamin De Boe · Aug 26, 2020 Or Class Test.Person Extends (%Persistent, %XML.Adaptor) { Property Name As %String; Property Id As %Integer [ Identity ]; }
go to post Benjamin De Boe · Aug 25, 2020 I agree entirely a separate table with FK links between the two is the SQL-friendliest way to go about this today. With expression indices (and later next year LATERAL JOIN support), we will soon have a practical way to leverage these Object-ish data models in all their beauty from SQL too!
go to post Benjamin De Boe · Aug 25, 2020 This is not possible today, but happens to be something due for 2020.4 or 2021.1 in the form of expression indices. The documentation may be slightly confusing here as the BuildValueArray() mechanism applies to non-collection properties and not "array of" or "list of" properties. The section that describes it just happens to be placed right after the section describing how to use the ELEMENTS trick to index them in their entirety. Note that you can use BuildValueArray() for %ArrayOfObjects properties, but those aren't projected as a child table. A possible workaround would be through a separate property that's just there as an intermediary for your index: Property AR As array Of Sample.Address; Property AllStates As %String [ Calculated, ReadOnly, SqlComputeCode = {set {*} = {%%ID}}, SqlComputed ]; Index AllStatesIDX On AllStates(ELEMENTS); ClassMethod AllStatesBuildValueArray(value, ByRef valueArray) As %Status { kill valueArray set tObj = ..%OpenId(value), tKey = "" for { set tAddress = tObj.AR.GetNext(.tKey) quit:tKey="" set valueArray(tKey) = tAddress.State } quit $$$OK } Then you can include it in queries: select * from sample.person where FOR SOME %ELEMENT(AllStates) (%VALUE = 'KY')
go to post Benjamin De Boe · Aug 25, 2020 I believe this section of the docs has the answer to your question: https://docs.intersystems.com/iris20201/csp/docbook/Doc.View.cls?KEY=GSQLOPT_indices#GSQLOPT_indices_collection
go to post Benjamin De Boe · Jul 17, 2020 the contents of those %Dictionary tables is a little geared towards class/object models. If you want a more SQL-focused view on your tables, you can look at the INFORMATION_SCHEMA package, which adheres to mainstream JDBC/ODBC dictionary structure and is used by mainstream SQL and BI tools like DBeaver, VSCode-SQLTools, Tableau, PowerBI, etc Note you'll need to tick the "System" checkbox when browsing this schema in the System Management Portal.
go to post Benjamin De Boe · Jul 15, 2020 Hi David, maybe you can elaborate a little more on the particular latency challenge you faced? As Dmitriy mentioned, sharding will spread your data and corresponding query workload across multiple nodes in order to achieve higher efficiencies on very large datasets and is especially fit for read-mostly workloads. ECP, when used in a typical application server setup, is meant to distribute user-bound workload across multiple servers, so serving a slightly different goal. Depending on your use case, either of those (or a combination of them) can be more appropriate. See also this overview and introductory video for more info.
go to post Benjamin De Boe · Jul 9, 2020 Could you add a little more detail on what you mean with "classes" and "used"? If you are talking about generic ObjectScript classes and look at usage as plain invocations from any ObjectScript code, you may not be able to find that at all. If, on the other hand, you're looking for Business Services, Processes and Operations classes, there's a good chance we can pull much of that from available metadata (up to your most recent purge). Also, for persistent classes, you may be able to find whether they were recently accessed through SQL by looking into the Statement Index, but that of course only is about SQL and doesn't guarantee you they weren't used otherwise.
go to post Benjamin De Boe · Jul 9, 2020 Indeed. An incredible amount of things have happened between that version and the current IRIS release, one being automatic parallelization of eligible SQL queries, which likely does exactly what you're looking for.
go to post Benjamin De Boe · Jul 9, 2020 Maybe this Getting Started guide is also a worthwhile reference
go to post Benjamin De Boe · Jul 9, 2020 if that column is currently in a string format (you can tell from the column/resultset metadata), you can use a different pattern to check if it meets the raw format: SELECT CASE WHEN '01/01/2020' %PATTERN '1.2N1"/"1.2N1"/"4N' THEN 'valid' ELSE 'invalid' END if you also want to check if that resolves to a valid date, you can use CAST or TO_DATE, but those will throw errors if they don't resolve to a valid date, so a small custom function in ObjectScript is perhaps not a bad idea
go to post Benjamin De Boe · Jul 8, 2020 Examples where System is useful include when you have a set of classes that are used in compile-time tasks such as method generators and projection classes, as used by several InterSystems components such as BI cube definitions and NLP domain definitions. The Class Parameter expression example you describe is probably another example in the same category.
go to post Benjamin De Boe · Jun 22, 2020 Great suggestions @Eduard Lebedyuk ! There's a vast surface area here, so we're really looking forward to something that showcases innovation on the technology end, something that carries a real-world data set/feed, or both! I can't wait until the week is over :-) PS: don't hesitate to use this channel for any questions you have. Some of our technology in this area is still fresh and we're always happy to learn how we can make it easier to use.
go to post Benjamin De Boe · Jun 11, 2020 We're looking to port this to the next maintenance release for 2020.1 as well, so that'd be 2020.1.1
go to post Benjamin De Boe · Jun 8, 2020 Can you tie those performance regressions to the new (one-time) embedded SQL late compilation behaviour or is there anything else happening? As a ground rule, we consider performance regressions upon upgrading to be bugs and will happily work with you to get to the root cause and reconsider optimizer changes and updated heuristics. Please reach out through the WRC if you think we can help.
go to post Benjamin De Boe · Jun 8, 2020 The universal query cache has very little if anything to do with sharding (see here) I also wouldn't recommend using custom class queries for anything for anything you can achieve with SQL. It leaves you with much more flexibility and transparent benefits (presumed ;-) ) as you update your table statistics or upgrade to a new version.
go to post Benjamin De Boe · Jun 8, 2020 You can force embedded SQL to be compiled along with the embedding application code using a compile flag /compileembedded=1. This is not recommended though, so we'd really like to know more about why the current model doesn't suit you. In fact this first-run compiling would allow your customers to leverage the statistics for their data rather than what you baked into it when compiling the embedded SQL. See also this article.
go to post Benjamin De Boe · May 24, 2020 Access Denied errors can stem from a variety of reasons. As a sanity check, running the windows ODBC connection manager's test function never hurts to rule out connectivity issues. By any means, you can consult with the WRC on support issues like this.
go to post Benjamin De Boe · May 24, 2020 I only mentioned the UQC to clarify where source code for embedded SQL went. The use of host variables for table/field names has been addressed in the docs since.
go to post Benjamin De Boe · May 20, 2020 For more about where the source code for embedded SQL has gone in 2020.1, please see this article on the Universal Query Cache Indeed funny the doc doesn't call out table names while it does talk about field names, probably because it silently assumes the one implies the other. I'll ask our doc writer to fix that. Thanks for the notification.