<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: D.I. Studio - etls_recordCheck macro issues in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135975#M1975</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mike has there been an update for this issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jonathan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 15 Dec 2014 16:30:54 GMT</pubDate>
    <dc:creator>jdmarshg</dc:creator>
    <dc:date>2014-12-15T16:30:54Z</dc:date>
    <item>
      <title>D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135966#M1966</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Greetings all:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;SAS 9.3 / DI Studio 4.3 / Windows server / SQL-Server database&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am attempting to use the DI Studio transformations to create an SQL extract (small subset from a very large SQL-Server table).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The trouble is the generated code always inserts a "pre-code" etls_recordCheck macro to count the number of records from the table, along the lines of:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;%macro etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let etls_recCheckExist = %eval(%sysfunc(exist(SQL_DB.Table, DATA)) or&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %sysfunc(exist(SQL_DB.Table, VIEW)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if (&amp;amp;etls_recCheckExist) %then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into :etls_recnt from SQL_DB.Table;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;%mend etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;%etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;MPRINT(ETLS_RECORDCHECK):&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;MPRINT(ETLS_RECORDCHECK):&amp;nbsp;&amp;nbsp; select count(*) into :etls_recnt from SQL_DB.Table;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 60px;"&gt;&lt;/P&gt;&lt;P&gt;..which takes AGES, before then generating the desired SQL code (which only extracts the previous 24 hours of data from a table of many years..)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There is then some "post-code" to insert the etls_recnt value into a SAS performance macro.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The subset extract takes fractions of a second, however the inserted count(*) macro takes many minutes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Questions:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Why count the entire table, when only the subset is processed? What value is the total table size to the performance stats when only the subset is actually extracted?&lt;/LI&gt;&lt;LI&gt;Beyond substituting all generated transformations with user-defined code omitting the macro, can anyone offer options?&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Andrew.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Apr 2014 13:23:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135966#M1966</guid>
      <dc:creator>AndrewHowell</dc:creator>
      <dc:date>2014-04-28T13:23:26Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135967#M1967</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Andrew&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is disturbing behavior indeed!&amp;nbsp; I can't stand the fact that they do a select count(*) from the table. I ran into this with a billion row table and needless to say, the DBA was not pleased.&amp;nbsp; To get around this, I unmapped the input table but i am not sure that this is possible for all use cases.&amp;nbsp; I personally think that this is a horrible bug.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-greg&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Apr 2014 13:59:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135967#M1967</guid>
      <dc:creator>gregorysnelson</dc:creator>
      <dc:date>2014-04-28T13:59:38Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135968#M1968</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This really doesn't make any sense. My guess is that some performance monitoring facilities have been turned on; hopefully turning them off will get rid of this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The consequences of doing a select count(*) on many brands of DBMS is well known, so it's hard to imagine that this is production code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try opening a track with SAS Tech Support. They have the specialized knowledge to help with this kind of thing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Please repost when you find out more...we'd love to know what's up!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Apr 2014 14:23:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135968#M1968</guid>
      <dc:creator>TomKari</dc:creator>
      <dc:date>2014-04-28T14:23:42Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135969#M1969</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I share your surprise/disappointment.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There was discussion in EG community recently about pros/cons to having EG's macro source code defined in the EG binary, rather than as autocall macros.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the definition of %ETLS_RecordCheck were provided as an autocall macro, it would be easy to turn it off by modifying the macro definition.&amp;nbsp; But I assume like the EG macros, the definition of the DIS macros is stored somewhere in a binary.&amp;nbsp; Since the macro source code is being generated and then immediately invoked by the code generated by DI studio transformation, I think you're left hoping that there is a way to turn this off this level of monitoring, as Tom suggests.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mostly I've been sticking to user-define code in my DI jobs.&amp;nbsp; Which works well for a programmer, but perhaps not for the main intended DIS user.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;--Q.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 28 Apr 2014 16:54:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135969#M1969</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2014-04-28T16:54:16Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135970#M1970</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Greg,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The figure obtained in the inserted code at the start of the task is passed in a %perfstop() macro at the end of the task.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%perfstop(metrVal6=%sysfunc(max(&amp;amp;etls_recnt,-1)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I understand the reason for logging performance metrics, however I cannot fathom the reason for storing the &lt;EM&gt;&lt;STRONG&gt;size of an&lt;/STRONG&gt; &lt;STRONG&gt;entire table&lt;/STRONG&gt;&lt;/EM&gt; for an SQL subset extraction; surely it would make more sense to log the &lt;EM&gt;&lt;STRONG&gt;size of the subset extracted&lt;/STRONG&gt;&lt;/EM&gt;?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also, there seems to be no ability to control the ETLS_RecordCheck macro code being inserted into the task. The ETLS_RecordCheck macro generates different code; below are examples from an SCD2 Loader, some Base data, some Oracle, some ODBC - but there does not appear to be the ability to surpress (or redefine) this macro.&amp;nbsp; Why hard code the macro each time? Why not have an autocall macro with the smarts to test the data source to determine the most efficient way to obtain the metric? For example, interrogate an Oracle or SQL-Server's dictionary to obtain the value, rather than perform a count(*).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The macro is too "absolute" and inflexible.&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;Base&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;LIBNAME STG BASE "Z:\Data\Staging";&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%&lt;/SPAN&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;let etls_recCheckExist = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_recnt = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%macro etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_recCheckExist = %eval(%sysfunc(exist(STG.ACCOUNTS, DATA)) or&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %sysfunc(exist(STG.S_FINANCIAL_ACCOUNT, VIEW)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%if (&amp;amp;etls_recCheckExist) %then&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %do;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; %local etls_syntaxcheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; %let etls_syntaxcheck = %sysfunc(getoption(syntaxcheck));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; /* Turn off syntaxcheck option to perform following steps&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; options nosyntaxcheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; proc contents data = STG.ACCOUNTS out = work.etls_contents(keep = nobs) noprint;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; data _null_;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set work.etls_contents (obs = 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput("etls_recnt", left(put(nobs,32.)));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; proc datasets lib = work nolist nowarn memtype = (data view);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delete etls_contents;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; quit;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; /* Reset syntaxcheck option to previous setting&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; options &amp;amp;etls_syntaxcheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %end;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%mend etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;STRONG&gt;&lt;EM style="font-size: 8pt; font-family: courier new,courier;"&gt;BTW - why bother with PROC CONTENTS, PROC DATASETS, etc? What's wrong with:&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 60px;"&gt;&lt;EM style="font-size: 8pt; font-family: courier new,courier;"&gt;data _null_;&lt;/EM&gt;&lt;BR /&gt;&lt;EM style="font-size: 8pt; font-family: courier new,courier;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;set STG.ACCOUNTS(obs = 1) o&lt;/SPAN&gt;bs=nobs;&lt;/EM&gt;&lt;BR /&gt;&lt;EM style="font-size: 8pt; font-family: courier new,courier;"&gt;symputx("etls_recnt", nobs);&lt;/EM&gt;&lt;BR /&gt;&lt;EM style="font-size: 8pt; font-family: courier new,courier;"&gt;run;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="text-decoration: underline;"&gt;ORACLE&lt;/STRONG&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;LIBNAME MYORA ORACLE&amp;nbsp; PATH=ORA_SVR&amp;nbsp; SCHEMA=SAS_ORA&amp;nbsp; AUTHDOMAIN="ORA_Auth" ;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%rcSet(&amp;amp;syslibrc);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_recCheckExist = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_hasRows = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%macro etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %let etls_recCheckExist = %eval(%sysfunc(exist(MYORA.ACCOUNTS, DATA)) or&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %sysfunc(exist(MYORA.ACCOUNTS, VIEW)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %if (&amp;amp;etls_recCheckExist) %then&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %do;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; %local etls_syntaxcheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; %let etls_syntaxcheck = %sysfunc(getoption(syntaxcheck));&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; /* Turn off syntaxcheck option to perform following steps&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; options nosyntaxcheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; data _null_;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set MYORA.ACCOUNTS( obs=1 );&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; call symput("etls_hasRows",'1');&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; /* Reset syntaxcheck option to previous setting&amp;nbsp; */&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; options &amp;amp;etls_syntaxcheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %end;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%mend etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;BR /&gt; &lt;STRONG&gt;&lt;EM&gt;but in the same transformation I've also found this for an Oracle table:&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_recnt = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%macro etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %let etls_recCheckExist = %eval(%sysfunc(exist(MYORA&lt;/SPAN&gt;.FINANCIALS, DATA)) or&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %sysfunc(exist(MYORA&lt;/SPAN&gt;.FINANCIALS, VIEW)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %if (&amp;amp;etls_recCheckExist) %then&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %do;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into :etls_recnt from MYORA.FINANCIALS&lt;/SPAN&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; quit;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %end;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%mend etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt; ODBC&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;LIBNAME MY_ODBC ODBC&amp;nbsp; DATASRC="CORP"&amp;nbsp; SCHEMA=DBO&amp;nbsp; AUTHDOMAIN="Corp_Auth" ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%let etls_recnt = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%macro etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %let etls_recCheckExist = %eval(%sysfunc(exist(MY_ODBC.DAILY, DATA)) or&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %sysfunc(exist(MY_ODBC.DAILY, VIEW)));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %if (&amp;amp;etls_recCheckExist) %then&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp; %do;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; proc sql noprint;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select count(*) into :etls_recnt from MY_ODBC.DAILY;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;&amp;nbsp;&amp;nbsp; quit;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt; %end;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%mend etls_recordCheck;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier; font-size: 8pt;"&gt;%etls_recordCheck;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Apr 2014 06:25:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135970#M1970</guid>
      <dc:creator>AndrewHowell</dc:creator>
      <dc:date>2014-04-29T06:25:09Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135971#M1971</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We have experienced a similar issue, but in our case &amp;amp;etls_recCheckExist did note generate any select count(*) code.&lt;/P&gt;&lt;P&gt;But, the exist function itself generated a select count(*) when the target object is a view...&lt;/P&gt;&lt;P&gt;So in our case, it'a SAS/ACCESS thing, not DI Studio.&lt;/P&gt;&lt;P&gt;We are using SQL Server via OLEDB.&lt;/P&gt;&lt;P&gt;SAS has reproduced this behavior, but claim it's feature, not a bug. So now they have put this as a "Future request", whatever that means/will lead to...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 29 Apr 2014 11:33:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135971#M1971</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-04-29T11:33:27Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135972#M1972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="119192" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt; what is the support track for this? I'm happy to investigate where this stands and let you know.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 02 May 2014 18:27:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135972#M1972</guid>
      <dc:creator>MikeFrost</dc:creator>
      <dc:date>2014-05-02T18:27:27Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135973#M1973</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Gr8!&lt;/P&gt;&lt;P&gt;7610822316&lt;/P&gt;&lt;P&gt;Slight correction, ACCESS to OLEDB uses OpenRowSet(), which in turn executes the view. And my interpretation is that this gives the same result (performance wise) as as a select count(*).&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 05 May 2014 09:03:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135973#M1973</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-05-05T09:03:43Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135974#M1974</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Has there been a resolution for this? &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jonathan &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Dec 2014 15:42:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135974#M1974</guid>
      <dc:creator>jdmarshg</dc:creator>
      <dc:date>2014-12-15T15:42:01Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135975#M1975</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mike has there been an update for this issue.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jonathan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Dec 2014 16:30:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135975#M1975</guid>
      <dc:creator>jdmarshg</dc:creator>
      <dc:date>2014-12-15T16:30:54Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135976#M1976</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Jonathan,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;No update on my part - we chose to retain the existing process rather than start replacing them with lots of user-written code, but would like to see the transformation updated (corrected?) to be more flexible in how it gathers its stats.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Andrew.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Dec 2014 23:39:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135976#M1976</guid>
      <dc:creator>AndrewHowell</dc:creator>
      <dc:date>2014-12-15T23:39:34Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135977#M1977</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry for the delay in my response to this thread. There are a lot of angles to this that I wanted to make sure we address.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;First, the original issue reported here. To summarize, Andrew Howell's comment concerns the "etls_recordCheck" macro - he notes that DI Studio always seems to insert this macro into the code, which passes a :select count(*) statement to SQL Server to count the rows in a table. This statement takes a very long time to return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From what I can tell, Andrew would ultimately like a way to control whether the "etls_recordCheck" macro" is inserted into the code. This can be done by turning off the option that enables it, which is "Collect Table Statistics". This option is enabled by default but can be disabled for a given job in DI Studio by right-clicking within the job diagram and unchecking the option "Collect Table Statistics". This can also be turned off for any job in the preferences for DI Studio by going to the "Tools" menu, selecting "Options", clicking on the "Job Editor" tab, and in the middle of the dialog box, unchecking the option "Collect Table Statistics".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;A secondary questions concerns how the code that relates to this option is generated. The code for this must be capable of running against multiple data sources, so it needs to be generic for any data source. We could enhance the option to first query to determine the data source, and then pass a more data source-specific query to collect these table statistics, but understand that we would be making one or more roundtrips to the database to run a macro that can easily be disabled when it is not desirable and those roundtrips impact performance as well. Also, take into account that if we do this for SQL Server, Oracle, etc. customers will expect us to make and maintain these database-specific changes for this setting for each and every data source they could be accessing, and keep them current for database changes into the future. Because of this, we think it is preferable for those customers who want to have more fine-grained controls over this table statistics code to make code changes in it themselves to suit the unique needs of their own environments.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Finally, LinusH's issue concerns the use of the ACCESS engine for OLEDB, which, as he correctly notes, is caused by is the use of OpenRowset () against the views. The reason why this is not a bug is that OpenRowset () will perform this way when you run this query natively - in other words, the query runs as fast it would outside of SAS code. One way to make this query faster, however, would be to set the property DBPROP_MAXROWS and specify an upper limit of the number of rows returned to something manageable, like 100, 1000, etc. We do not expose a way in the ACCESS engine to set this property, thus the "enhancement" nature of this, an enhancement that we have thus far elected not to implement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope that provides some clarification. Please post any additional questions about these issues.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mike F.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Dec 2014 18:58:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135977#M1977</guid>
      <dc:creator>MikeFrost</dc:creator>
      <dc:date>2014-12-17T18:58:24Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135978#M1978</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mike,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Firstly, thanks for the thorough response.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's not that I mind the %etls_recordCheck() macro being inserted; I understand it's purpose in collecting statistics. What I cannot understand is why an extraction of (for example) one day's data from a multi-year historic table is preceeded by an %etls_recordCheck() macro which performs a count(*) of the &lt;STRONG&gt;ENTIRE&lt;/STRONG&gt; table - not only is this time-consuming but I cannot see any value in this statistic; surely it is the &lt;STRONG&gt;count(*) of the extracted records&lt;/STRONG&gt; which is of value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As to how dynamic to make the underlying code embedded within the %etls_recordCheck() macro - I concur the "multiple roundtrips" to the data source would be undesirable. My thoughts were to interrogate the &lt;STRONG&gt;ENGINE&lt;/STRONG&gt; field from the &lt;STRONG&gt;dictionary.libnames&lt;/STRONG&gt; table to determine the type of data source, and from that construct the most efficient datasource-specific code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Andrew.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Dec 2014 06:08:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135978#M1978</guid>
      <dc:creator>AndrewHowell</dc:creator>
      <dc:date>2014-12-18T06:08:44Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135979#M1979</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Why don't you post this as an "idea". I will get my vote.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Dec 2014 10:39:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135979#M1979</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2014-12-18T10:39:40Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135980#M1980</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;One idea I've had for our current ETL is a metric collecting job at the end of the job stream, that would use the dictionary tables to capture the record count of all our tables altered by the ETL.&amp;nbsp; Since it would regularly capture the record count after each run, the records added each day (for the daily jobs) would be the difference between the two dates (assuming records are not deleted by the ETL).&amp;nbsp; &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;It would be easy to graph data growth over time, etc.&amp;nbsp; It would also be easy to have this metadata driven; simply have a table for the datasets you wanted to track (we'd probably just track all the tables in key libraries).&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One minor caveat is it would only collect the metrics at the end of the successful run of all jobs, rather than individually after each job.&amp;nbsp; If that was an issue, just alter this approach to process a single table, and add that macro to the end of all your jobs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IMO it would be trivial to create such a job.&amp;nbsp; If this meets (or exceeds) the metrics collected by %etls_recordCheck, you could just turn off the "Collect Table Statistics" for all your jobs, and take matters into your own hands, rather than run the inefficient code in %etls_recordCheck.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Dec 2014 11:54:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135980#M1980</guid>
      <dc:creator>ScottBass</dc:creator>
      <dc:date>2014-12-18T11:54:53Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135981#M1981</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;But how will you deal with external data sources, their record count are not usually visible in the dictionary tables...?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Dec 2014 13:17:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135981#M1981</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-12-19T13:17:29Z</dc:date>
    </item>
    <item>
      <title>Re: D.I. Studio - etls_recordCheck macro issues</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135982#M1982</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I got some more questions/thoughts.&lt;/P&gt;&lt;P&gt;First, does changing this property DBPROP_MAXROWS affext anything other than the SAS exist function? And to me it sounds like I would set this to 1, if it just used for checking table existence.&lt;/P&gt;&lt;P&gt;But, changing this is quite technical - is it optimal to put this responsibility to the customer? One could ask for is a clear recommendation in usage not or similar.&lt;/P&gt;&lt;P&gt;Mapping SAS functions to external calls should be the responsibility of SAS/ACCESS, and is &lt;EM&gt;OpenRowset&lt;/EM&gt; () the most optimal? I'm definitely not an OLEDB programmer, but ought to be better ways - no? A quick browse on the internet suggests &lt;EM&gt;dbTbl.Rows.Count&lt;/EM&gt;, but again, I'm no OLEDB programmer...:smileysilly:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 19 Dec 2014 13:52:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/D-I-Studio-etls-recordCheck-macro-issues/m-p/135982#M1982</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-12-19T13:52:01Z</dc:date>
    </item>
  </channel>
</rss>

